activedirectory在Java中的实现

activedirectory在Java中的实现,java,active-directory,Java,Active Directory,我想在java中执行Active Directory身份验证,其中通过登录屏幕输入用户名和密码。 我们有一个根目录,里面有许多子目录。如何执行身份验证,以便在整个层次结构中搜索用户并执行LDAP绑定。 如何在根目录中的所有子目录中自动查找用户 请在下面查找代码段: Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11); ldapEnv.put(Co

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

请在下面查找代码段:

  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);
Hashtable ldapEnv=新的Hashtable(11);
ldapEnv.put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
//ldapEnv.put(Context.PROVIDER\u URL,“ldap://127.0.0.1:10389");
ldapEnv.put(Context.PROVIDER_URL,prop.getProperty(“ldapServer”);
ldapEnv.put(Context.SECURITY_身份验证,“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(上下文、安全凭据、密码);
ldapContext=新的初始目录上下文(ldapEnv);

我遇到的问题是,由于Context.SECURITY\u主体是硬编码的,因此搜索只在这个不符合我要求的硬编码目录中进行。

我见过的大多数实现,使用只读Active directory搜索用户的上下文,然后尝试使用用户的完整上下文登录,以及提供的密码。类似的内容将帮助您开始搜索部分。

这不是广告授权。这是一个愚蠢的束缚。AD auth是Kerberos。