Java:LDAP搜索返回1行

时间:2017-07-31 18:51:50

标签: java active-directory ldap

我正在尝试从我的活动目录中获取所有用户,但是我的代码只返回一行。我尝试过以下目前只输出一个用户。

private void getUserBasicAttributes(String username, LdapContext ctx) {

    try {
        List<String> usersList = new ArrayList<String>();
        SearchControls constraints = new SearchControls();
        constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);


        //First input parameter is search bas, it can be "CN=Users,DC=YourDomain,DC=com"
        //Second Attribute can be uid=username
         NamingEnumeration<SearchResult>  answer = ctx.search("DC=domain,DC=com", "(&(objectCategory=user))"
             , constraints);
        if (answer.hasMoreElements()) {
        Person person = new Person();
           SearchResult  attrs = ((SearchResult) answer.next());
            String names[] = attrs.getName().split(",");
                 String name[] = names[0].split("=");

            usersList.add(name[1]);


        }else{
            throw new Exception("Invalid User");
        }

        System.out.println(usersList.size());

    } catch (Exception ex) {
        ex.printStackTrace();
    }


}

3 个答案:

答案 0 :(得分:2)

您没有循环遍历所有结果,在if

中添加while循环
/usr/local/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group optimizer-group --describe

TOPIC                          PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG        CONSUMER-ID                                       HOST                           CLIENT-ID
eddude-error-topic             0          0               0               0          consumer-2-e839517b-a150-498d-9054-31ec7a655936   /10.xxx.xx.xxx                 consumer-2
...

答案 1 :(得分:0)

您需要while而不是if

while (answer.hasMoreElements()) {
    Person person = new Person();
    SearchResult  attrs = ((SearchResult) answer.next());
    String names[] = attrs.getName().split(",");
    String name[] = names[0].split("=");
    usersList.add(name[1]);
}
if (usersList.size() == 0) {
    throw new Exception("Invalid User");
}

您也可以简化名称元素处理。无需解析DN。只需指定您想要预先返回的属性并直接检索它们。

答案 2 :(得分:-1)

你这太难了。没有理由执行任何“拆分”pf值。

// Specify the ids of the attributes to return
String[] attrIDs = { "uid" };

// Get ONLY the attributes desired
Attributes answer = ctx.getAttributes("CN=Users,DC=YourDomain,DC=com", attrIDs);
for (NamingEnumeration ae = answer.getAll(); ae.hasMore();) {
    Attribute attr = (Attribute)ae.next();
    System.out.println("attribute: " + attr.getID());
    /* Print each value */
    for (NamingEnumeration e = attr.getAll(); e.hasMore();
         System.out.println(e.next()))
        ;
}

请告诉我如何提供帮助。