使用 Java 建立 LDAP 连接

我正在尝试使用返回 LdapContext 并采用用户名、密码、域名和服务器参数的函数在 Java 中建立 LDAP 连接。不清楚这些参数应该是什么样子。


我正在尝试连接到这个只读 LDAP 测试服务器。 http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/


我正在使用的 getConnection 方法派生自我在此处找到的 Active Directory 类。 http://www.javaxt.com/wiki/Tutorials/Windows/How_to_Authenticate_Users_with_Active_Directory


目前,我正在尝试 getConnection("tesla", "password", "cn=read-only-admin,dc=example,dc=com", "ldap.forumsys.com:389"),但这是行不通的。我试过切换域和服务器,并尝试使用“read-only-admin.example.com”而不是“cn=...”。


getConnection函数


public static LdapContext getConnection(String username, String password, String domainName, String serverName) throws NamingException {


        if (domainName==null){

            try{

                String fqdn = java.net.InetAddress.getLocalHost().getCanonicalHostName();

                if (fqdn.split("\\.").length>1) domainName = fqdn.substring(fqdn.indexOf(".")+1);

            }

            catch(java.net.UnknownHostException e){}

        }


        //System.out.println("Authenticating " + username + "@" + domainName + " through " + serverName);


        if (password!=null){

            password = password.trim();

            if (password.length()==0) password = null;

        }


        //bind by using the specified username/password

        Hashtable props = new Hashtable();

        String principalName = username + "@" + domainName;

        props.put(Context.SECURITY_PRINCIPAL, principalName);

        if (password!=null) props.put(Context.SECURITY_CREDENTIALS, password);



        String ldapURL = "ldap://" + ((serverName==null)? domainName : serverName + "." + domainName) + '/';

        props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

        props.put(Context.PROVIDER_URL, ldapURL);

        try{

            return new InitialLdapContext(props, null);

        }

慕丝7291255
浏览 199回答 1
1回答

胡子哥哥

问题是您正在尝试使用非标准用户名进行身份验证(适用于 AD 但不适用于 OpenLDAP)。String principalName = username + "@" + domainName; props.put(Context.SECURITY_PRINCIPAL, principalName);使用 OpenLDAP 并如教程中所示,principalName 应该是uid=tesla,dc=example,dc=com
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java