2017-01-17 16 views
0

Я использовал этот код для извлечения информации о группе пользователя 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?

ответ

0

Поскольку имя sAMAccountName уникально в контексте, вы не должны ожидать больше одного результата в своем результате. Вы должны получить значение атрибута memberOf, чтобы узнать о группах.

+0

Как этот ответ помогает решить указанную проблему? – marthursson

+0

Я думаю, что первое выполнение 'hasMoreElements()' работает нормально, но 'attrs.get (" cn ")' возвращает null, а 'toString()' будет бомбить. Это атрибут 'memberOf', который нужно обработать. Видимо, я отправил свой ответ, не закончив его. Сожалею. – marabu

+0

Вопрос утверждает, что hasMoreElements возвращает false – marthursson

0

hasMoreElements способ NamingEnumeration бесшумно проглатывает любые исключения, которые могут произойти. Я почти уверен, что что-то пойдет не так под капотом, пытаясь принести результаты.

Вместо этого попробуйте использовать метод hasMore, так как это приведет к любым основным исключениям, которые могут произойти.

+0

Пробовал это также. Но не получилось. Исключений нет. –