2017-07-31 11 views
0

私のアクティブなディレクトリからすべてのユーザーを取得しようとしていますが、私のコードはただ1つの行を返しています。私は現在、1人のユーザーだけを出力している以下を試しました。Java:1行を返す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(); 
    } 


} 

答えて

2

あなたは、これはあまりにもハード作っている場合

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

内のwhileループを追加し、すべての結果をループされていません。 「分割」の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つの属性のみを取得している場合は、その属性を直接取得できます。すべての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を解析する必要はありません。前に戻したい属性を指定して、それらを直接取得してください。

関連する問題