【发布时间】:2017-06-01 20:18:15
【问题描述】:
我使用此代码检索 ldap 用户的组信息。
String ldapUri = this.url;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUri);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, this.managerDn);
env.put(Context.SECURITY_CREDENTIALS, this.managerPassword);
try {
LdapContext ctx = new InitialLdapContext(env,null);
SearchControls ctls = new SearchControls();
String[] attributes = {"memberOf"};
ctls.setReturningAttributes(attributes);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<?> answer = ctx.search("dc=abc,dc=com", "(&(objectclass=user)(sAMAccountName=xxxx))", ctls);
**//At this point, I can see the values that I am expecting under entries of answer but hasMoreElements() returns false!**
while(answer.hasMoreElements()) {
SearchResult rslt = (SearchResult) answer.next();
Attributes attrs = rslt.getAttributes();
String groups = attrs.get("cn").toString();
String [] groupname = groups.split(":");
String userGroup = groupname[1];
System.out.println(attrs.get("cn"));
}
}
catch(Exception e) {
e.printStackTrace();
}
answer.hasMoreElements() 返回 false。但是,我可以在调试时在 answer 对象的条目下看到我期望的值。有人可以告诉我我错过了什么。
如果这不是正确的方法,我如何获取 ldap 用户所在的组?
【问题讨论】:
标签: spring spring-security ldap spring-ldap ldap-query