簡體   English   中英

Java:LDAP搜索返回1行

[英]Java: LDAP Search returning 1 row

我正在嘗試從活動目錄中獲取所有用戶,但是我的代碼僅返回一行。 我已經嘗試了以下內容,目前僅輸出一個用戶。

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


}

您並沒有遍歷所有結果,請在if內添加一個while循環

if (answer.hasMoreElements()) {
    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]);
    }
}else{
    throw new Exception("Invalid User");
}

您需要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。 只需指定要返回的屬性,然后直接檢索它們即可。

您太難了。 沒有理由執行任何“拆分” 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()))
        ;
}

讓我知道我將如何提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM