2015-05-29 3 views
0

У меня есть приложение Java, которое я использую для поиска групп. Он работает очень хорошо с поиском на основе имени группы (cn), но иногда я получаю больше одного результата, так как тот же cn используется в других ветвях. У меня есть DN группы, и мне было интересно, как выполнить поиск на основе DN или если можно получить доступ к атрибуту напрямую, так как у меня есть полный путь. Вот код, я использую:Java как получить атрибут из ldap с помощью DN?

public Group getGroup(String groupName) throws Exception { 

     List<User> memberList = new ArrayList<User>(); 

     // Create the search controls 
     SearchControls searchCtls = new SearchControls(); 

     // Specify the search scope 
     searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

     // Specify the attributes to return 
     String returnedAtts[] = { MEMBER_FIELD }; 

     searchCtls.setReturningAttributes(returnedAtts); 

     // Specify the LDAP search filter 
     String searchFilter = "(&(objectClass=group)(CN=" + groupName + "))"; 

     // Search for objects using the filter 
     NamingEnumeration<SearchResult> answer = ctxMap.get(configMap.get(GROUP)).search(configMap.get(SEARCHBASE), searchFilter, 
       searchCtls); 

     SearchResult sr = null; 


     // Loop through the search results 
     while (answer.hasMoreElements()) { 
      sr = (SearchResult) answer.next(); 
     } 
     if (sr == null ) { 
      return group; 
     } 

     // Create an attribute for memberOf 
     javax.naming.directory.Attribute member = sr.getAttributes().get(MEMBER_FIELD); 

     // Enumeration of all elements in memberOf 
     NamingEnumeration<?> ne = member.getAll(); 


     // Loop though the enumeration, cut unwanted characters and add all 
     // elements to User List 
     while (ne.hasMoreElements()) { 
      ... 
     } 

    } 

Так что я хочу передать различающееся имя группы в качестве параметра функции вместо названия группы и имею поиск производится по тем или получить атрибуты непосредственно. Это возможно?

PS: этот код используется для получения членов определенной группы.

спасибо

ответ

1

Вам не нужно искать, если у вас есть DN. Просто посмотрите, с помощью lookup().

+0

спасибо! Он просто возвращает объект, какой тип объекта я должен использовать, если я хочу получить атрибуты? – trixrabbit

+0

Я читал, что с весной вы можете использовать AttributeMapper, но я никогда не использовал Spring раньше, поэтому мне интересно, есть ли другой способ. – trixrabbit

1

С помощью EJP, я нашел способ, чтобы получить атрибуты из DistinguishedName, не делая поиск:

Attributes attrs; 
attrs = ctx.getAttributes(dn); 

Attribute attr= attrs.get("the attribute you need"); 
Смежные вопросы