2017-07-31 96 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。只需指定您想要返回的属性并直接检索它们即可。