问题描述
|
这是我使用的代码:
Hashtable<String,String> environment = new Hashtable<String,String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY,\"com.sun.jndi.ldap.LdapCtxFactory\");
environment.put(Context.Security_PRINCIPAL,\"Administrator@ABC\");
environment.put(Context.Security_CREDENTIALS,\"testing123\");
environment.put(Context.PROVIDER_URL,\"ldap://192.168.64.222\");
DirContext dirContext = new InitialDirContext(environment);
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_ScopE);
NamingEnumeration searchResults = dirContext.search(\"cn=users,dc=ABC,dc=DEF,dc=COM\",\"(&(objectClass=user))\",searchControls);
while (searchResults.hasMore()) {
SearchResult searchResult = (SearchResult) searchResults.next();
Attributes attributes = searchResult.getAttributes();
System.out.println(attributes.get(\"userPassword\"));
}
dirContext.close();
结果是:
null
userPassword: [B@13a328f
userPassword: [B@1cd8669
userPassword: [B@337838
null
...
null
userPassword: [B@18a47e0
null
...
解决方法
答案是因为肯定没有提供。
原因是“ 2”属性不是将密码放入Active-Directory的本机属性。本机属性是unicodePwd,这是可以通过LDAPS写入但不能通过LDAP读取的特殊属性。
根据有关userPassword的Microsft文档,此属性可以充当普通属性,也可以类似于unicodePwd属性,所有这些都取决于Active Directory或轻型目录服务(LDS)的配置。
据我所知,默认情况下dSHeuristics为false,大多数情况下它根本没有设置,您可以在中看到它:
CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,Root domain in forest
因此,这就是为什么我认为userPassword并不是由基础结构中的某些预配置设置的。