Я использовал этот код для извлечения информации о группе пользователя ldap.Группы выбора пользователей 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();
}
ответ.hasMoreElements() возвращает false. Но я могу видеть значения, которые ожидаю под элементами объекта ответа во время отладки. Может кто-нибудь, пожалуйста, скажите мне, что мне не хватает.
Если это неправильный способ, как я могу получить группы, в которых находится пользователь ldap?
Как этот ответ помогает решить указанную проблему? – marthursson
Я думаю, что первое выполнение 'hasMoreElements()' работает нормально, но 'attrs.get (" cn ")' возвращает null, а 'toString()' будет бомбить. Это атрибут 'memberOf', который нужно обработать. Видимо, я отправил свой ответ, не закончив его. Сожалею. – marabu
Вопрос утверждает, что hasMoreElements возвращает false – marthursson