2012-02-21 2 views
4

Active Directory의 모든 사용자를 나열하는 중 일부 어려움에 직면하고 있습니다. 그룹에 연락했지만 불행히도 모든 사용자를 검색하지 못했습니다. 나는 사용자 Fullname, usernames, directorate를 찾고 있습니다. 내 코드 :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 디렉토리 설정에 대한 자세한 정보를 알려주십시오.
문제없이 여기에 있습니다 :
종류의 하드는

편집 한 줄 정보에 도움을주는거야?

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 = 김 김, 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 만 조사하고 싶다. 현재 한 줄에 있습니다. – user1080320

+0

당신이 제공 한 코드를 시도해 보았는데 그룹 이름을 보여주었습니다. 이 그룹에는 하나의 필드 만 있는데 그 필드는 이전 라인을 제공합니다. – user1080320

관련 문제