当我通过LDAP查询Active Directory组中的所有用户时,为什么某些用户的userPassword属性为null?

问题描述

| 这是我使用的代码
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并不是由基础结构中的某些预配置设置的。