我有一個用於搜索組的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:此代碼用於獲取某個組的成員。
謝謝
謝謝!它只是返回一個對象,如果我想獲取屬性,應該使用什麼類型的對象? – trixrabbit
我讀到Spring,你可以使用AttributeMapper,但我從來沒有用過Spring,所以我想知道是否有另一種方式。 – trixrabbit