不带域的Java Active Directory登录
我们有几个网站使用我们公司的广告。 目前,为了登录,我们必须使用以下
iuser\userid
使用代码:
Hashtable<String, String> config = new Hashtable<String, String>();
config.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
config.put("java.naming.provider.url", ldapUrl);
config.put("java.naming.security.authentication", "simple");
config.put("java.naming.security.principal", "iuser\\" + username);
config.put("java.naming.security.credentials", password);
InitialDirContext dirCxt = new InitialDirContext(config);
然而,当我们去搜索广告时,我们只能使用用户名
SearchControls cons = new SearchControls();
cons.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> resultsEnum =
derek.search("dc=iuser,dc=example,dc=example,dc=com", "(&(objectCategory=user)(cn={0}))", new Object[] {username}, cons);
当我们尝试创建InitialDirContext而不将域放在第一位时,我们会得到User not found响应
有没有一种方法可以创建InitialDirContext,而不必将我们的域放在用户名前面
# 1 楼答案
而我建议你使用Kerberos。您应该尝试使用全局目录,而不是使用
commonName
,而是使用像userPrincipalName
或aAMAccountName
这样的唯一属性