2012-12-24 51 views
1

我想在java中执行Active Directory认证,通过登录屏幕输入用户名和密码。 我们有一个根目录,里面有很多子目录。如何执行身份验证,以便用户在整个层次结构中进行搜索并执行LDAP绑定。 如何自动为用户查看根目录内的所有子目录?Java中的Active Directory实现

请找到下面的代码片段:

Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11); 
        ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
        //ldapEnv.put(Context.PROVIDER_URL, "ldap://127.0.0.1:10389"); 
        ldapEnv.put(Context.PROVIDER_URL, prop.getProperty("ldapServer")); 
        ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
        ldapEnv.put(Context.SECURITY_PRINCIPAL, "cn="+userName+",ou=Users,ou=ACN,ou=Peterborough,dc=xyz,dc=com"); 
        //ldapEnv.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");     
        ldapEnv.put(Context.SECURITY_CREDENTIALS,password); 
        ldapContext = new InitialDirContext(ldapEnv); 

我遇到的问题是,作为Context.SECURITY_PRINCIPAL是硬编码,所以搜索只发生在这个硬编码的目录不符合我的要求。

+0

这不是AD认证。这是一个愚蠢的约束。 AD认证是Kerberos。 –

回答

2

我见过的大多数实现都是使用只读Active Directory来搜索用户的上下文,然后尝试使用用户的完整上下文和提供的密码进行登录。像this这样的东西将帮助您开始搜索部分。