迭代 LDAP 搜索结果

Iterate LDAP Search Result

我对 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 的成员感兴趣。

我应该在这里进行迭代搜索吗?对于返回的每个组的含义,我是否再次为用户启动新的搜索?有没有一种方法可以在一个查询中获取所有内容?

能够通过以下更改使其正常工作。

 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("**********************");
 }

遍历成员属性以分别处理每个用户。