我不太熟悉Java LDAP API。我在这里想要实现的是查询一个OU下的所有组以及每个组下的用户列表。
类似
Group_1
g1_member_1
g1_member_2
g1_member_3
Group_2
g2_member_1
g2_member_2
等
我正在使用以下代码段。不知道我应该如何迭代搜索结果。
String[] attrs = {"dn","cn","member"};
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(attrs);
NamingEnumeration<SearchResult> results = lContext.search(ou, "cn=*", controls);
while (results.hasMore()){
SearchResult result = results.next();
System.out.println(result.getNameInNamespace());
}
当前,当我打印result.getNameInNamespace()
时,我得到了dn。我对cn以及每个cn的成员都感兴趣。
我应该在这里进行迭代搜索吗?对于返回的每个组,我是否会再次为用户发起新搜索?难道没有办法在一个查询中全部得到吗?
答案 0 :(得分:0)
能够通过以下更改进行操作。
String[] attrs = {"dn","cn","member"};
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(attrs);
NamingEnumeration<SearchResult> results = lContext.search(ou, "(&(objectClass=group))", controls);
while (results.hasMore()){
SearchResult result = results.next();
System.out.println(result.getNameInNamespace());
Attributes attributes = result.getAttributes();
System.out.println("DN "+result.getNameInNamespace());
System.out.println("CN "+attributes.get("cn"));
System.out.println("MEMBER "+attributes.get("member"));
System.out.println("**********************");
}
遍历member属性,以分别处理每个用户。