2012-02-21 14 views
4

Active Directory内のすべてのユーザーを一覧表示するのにいくつかの問題があります。私はグループに達しましたが、残念ながら、私はすべてのユーザーを取得できませんでした。私はユーザーフルネーム、ユーザー名、部署を探しています。私のコードは:Active Directoryグループ内のすべてのユーザーを一覧表示します

package client; 

import java.util.Hashtable; 
import javax.naming.Context; 
import javax.naming.NamingException; 
import javax.naming.ldap.InitialLdapContext; 
import javax.naming.ldap.LdapContext; 
import javax.naming.ldap.*; 
import java.util.Enumeration; 

import javax.naming.NamingEnumeration; 
import javax.naming.directory.DirContext; 
import javax.naming.directory.InitialDirContext; 
import javax.naming.directory.SearchControls; 
import javax.naming.directory.SearchResult; 
import javax.naming.directory.*; 

public class AD1 { 
    public AD1() { 
     super(); 
    } 

    public static String usersContainer = "cn=XX,ou=XX,ou=Groups,dc=XX,dc=XX,dc=XXX"; 

    public static void main(String[] args) { 

     try { 
      LdapContext ctx = null; 
      Hashtable env = new Hashtable(); 
      env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
      env.put(Context.SECURITY_AUTHENTICATION, "Simple"); 
      //it can be <domain\\userid> something that you use for windows login 
      //it can also be 
      env.put(Context.SECURITY_PRINCIPAL, "username"); 
      // env.put(Context.SECURITY_CREDENTIALS, "password"); 
      try { 
       env.put(Context.SECURITY_CREDENTIALS, "password".getBytes("UTF8")); 
      } 
      catch (java.io.UnsupportedEncodingException e) { /* ignore */ } 

      //in following property we specify ldap protocol and connection url. 
      //generally the port is 389 
      env.put(Context.PROVIDER_URL, "ldap://IP:PORT"); 

      ctx = new InitialLdapContext(env, null); 

      System.out.println("Connection Successful."); 

      DirContext ctx1 = new InitialDirContext(env); 
      SearchControls ctls = new SearchControls();   
      String[] attrIDs = { "distinguishedName","cn","name","uid", 
           "sn", 
           "givenname", 
           "memberOf", 
           "samaccountname", 
           "userPrincipalName" }; 

      ctls.setReturningAttributes(attrIDs);  
      ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
      //ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE); 
      NamingEnumeration answer = ctx1.search(usersContainer, "(objectClass=user)", ctls);  

      System.out.print("Out while loop"); 
      while(answer.hasMore()) { 
       System.out.print("while loop11"); 
       SearchResult rslt = (SearchResult)answer.next();   
       Attributes attrs = rslt.getAttributes();   
       System.out.println(attrs.get("uid"));   
       ctx1.close(); 
      } 

     } catch(NamingException nex) { 
      System.out.println("Active Directory Connection: FAILED"); 
      nex.printStackTrace(); 
     } 
    } 
} 

誰でも助けてください。

+0

あなたは 'answer.hasMore()'ループ内のコンテキストを閉じるべきではありません。それ以外の部分は書式設定の問題のようです。 'uid'だけを印刷しているので、それはあなたが見るものです。 – EJP

答えて

2

実際のディレクトリではなく、実際のディレクトリではないので、ldap/activeディレクトリの設定についての詳細はお手伝いできますか?
それはあなたが

に編集1を与える情報のお手伝いをするようなものは難しい:
あなたの問題はありませんここにいるのですか?

while(answer.hasMore()) { 
    System.out.print("while loop11"); 
    SearchResult rslt = (SearchResult)answer.next();   
    Attributes attrs = rslt.getAttributes();   
    //System.out.println(attrs.get("uid")); 
    System.out.println(attrs.get("cn")); 
    ctx1.close(); 
    } 
+0

さらに、エラーが発生しているかどうかを正確に知ることができます。 – Kiwy

+1

実際、エラーは発生していません。 CN = Kim、OU = XX、OU = OU = XX、DC = XX、DC = XX、DC = XX、CN = Johny John、OU = XX、OU =アカウント、 OU = XX、DC = XX、DC = XX、DC = XX。私は各自のためのCNと部署を持っているOUだけを探したい。現在、1行にあります。 – user1080320

+0

あなたが提供したコードを実行しようとしましたが、それは私にグループ名を示しました。メンバーであるこのグループには1つのフィールドしかありません。それは私に前の行を与えます。 – user1080320

関連する問題