我有一个用于搜索组的Java应用程序。它基于组名(cn)的搜索工作得很好,但有时我会得到多个结果,因为在其他分支中使用了相同的cn。我有该组的DN,我想知道如何根据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:此代码用于获取某个组的成员。
谢谢
答案 0 :(得分:1)
如果您拥有DN,则无需搜索。只需查一下,查找()。
答案 1 :(得分:1)
在EJP的帮助下,我发现了一种在不进行搜索的情况下从DistinguishedName获取属性的方法:
Attributes attrs;
attrs = ctx.getAttributes( dn );
Attribute attr= attrs.get( "the attribute you need" );