迭代LDAP搜索结果

时间:2018-07-31 17:05:13

标签: java active-directory ldap jndi

我不太熟悉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的成员都感兴趣。

我应该在这里进行迭代搜索吗?对于返回的每个组,我是否会再次为用户发起新搜索?难道没有办法在一个查询中全部得到吗?

1 个答案:

答案 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属性,以分别处理每个用户。