2017-07-31 87 views
0

我想從我的活動目錄中獲取所有用戶,但是我的代碼只返回一行。我已經嘗試了下面這個目前只輸出一個用戶。Java:LDAP搜索返回1行

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


} 

回答

2

你是不是遍歷所有的結果,添加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"); 
} 
-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())) 
     ; 
} 

讓我知道我可以如何幫助。

+0

不需要任何一個。如果你只是檢索一個屬性,你可以直接獲取它。無需遍歷所有1個屬性。不回答被問到的實際問題。 – EJP

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