2015-05-29 132 views
0

我有一個用於搜索組的Java應用程序。通過基於組名(cn)的搜索,它工作得非常好,但有時我得到多個結果,因爲在其他分支中使用了相同的cn。我有組的DN,我想知道如何根據DN進行搜索,或者是否可以直接訪問屬性,因爲我有完整的路徑。下面是我使用的代碼:Java如何使用DN從ldap獲取屬性?

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

我讀到Spring,你可以使用AttributeMapper,但我從來沒有用過Spring,所以我想知道是否有另一種方式。 – trixrabbit

1

隨着EJP的幫助下,我找到了一種方式來獲得從的distinguishedName屬性沒有做一個搜索:

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

Attribute attr= attrs.get("the attribute you need");