【问题标题】:Iterate LDAP Search Result迭代 LDAP 搜索结果
【发布时间】:2018-07-31 17:05:12
【问题描述】:

我对 Java LDAP api 不太熟悉。我在这里想要实现的是查询 OU 下的所有组以及每个组下的用户列表。

有点像

Group_1
g1_member_1 
g1_member_2 
g1_member_3
Group_2 
g2_member_1 
g2_member_2

等等。

我正在使用下面的代码 sn-p。不知道我应该如何迭代搜索结果。

 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 的成员都很感兴趣。

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

【问题讨论】:

    标签: java active-directory ldap jndi


    【解决方案1】:

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

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

    遍历成员属性以单独处理每个用户。

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 2020-11-23
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多