2011-12-18 10 views
18

मैं वेबलॉगिक, Ejb3.0 का उपयोग कर रहा हूं। जावा 1.6सक्रिय निर्देशिका में जावा से कनेक्ट करने के लिए कैसे करें

मुझे जावा कोड के माध्यम से सक्रिय निर्देशिका तक पहुंचने की आवश्यकता है। मैंने कई तरीकों से पढ़ा है (केर्बेरोस, एलडीएपी)

कोई भी ऐसा करने के आरामदायक तरीके से मुझे सलाह दे सकता है? मेरे पास कुछ पूर्ण कोड उदाहरण हो सकते हैं,

धन्यवाद, किरण।

+0

आप एडी के लिए क्या उपयोग करना चाहते हैं? केर्बेरोस आमतौर पर प्रमाणीकरण तक सीमित होता है (हालांकि एडी के केर्बेरोज टिकटों में भी उनके कुछ एक्सटेंशन होते हैं, जिन्हें आपको जावा से पढ़ना मुश्किल हो सकता है)। एलडीएपी प्रमाणीकरण भी कर सकता है, लेकिन उपयोगकर्ता के बारे में और जानकारी के साथ एक निर्देशिका भी है। मुख्य अंतर यह है कि आप एसएसओ के लिए केर्बेरोज का उपयोग कर सकते हैं। – Bruno

+0

आप जो चाहते हैं उससे अधिक सटीक बनें। –

उत्तर

33

यहाँ एक सरल कोड है कि प्रमाणित है और एक W2K3 पर एक LDAP खोज JNDI usin बनाने:

class TestAD 
{ 
    static DirContext ldapContext; 
    public static void main (String[] args) throws NamingException 
    { 
    try 
    { 
     System.out.println("Début du test Active Directory"); 

     Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11); 
     ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     //ldapEnv.put(Context.PROVIDER_URL, "ldap://societe.fr:389"); 
     ldapEnv.put(Context.PROVIDER_URL, "ldap://dom.fr:389"); 
     ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     //ldapEnv.put(Context.SECURITY_PRINCIPAL, "cn=administrateur,cn=users,dc=societe,dc=fr"); 
     ldapEnv.put(Context.SECURITY_PRINCIPAL, "cn=jean paul blanc,ou=MonOu,dc=dom,dc=fr"); 
     ldapEnv.put(Context.SECURITY_CREDENTIALS, "pwd"); 
     //ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl"); 
     //ldapEnv.put(Context.SECURITY_PROTOCOL, "simple"); 
     ldapContext = new InitialDirContext(ldapEnv); 

     // Create the search controls   
     SearchControls searchCtls = new SearchControls(); 

     //Specify the attributes to return 
     String returnedAtts[]={"sn","givenName", "samAccountName"}; 
     searchCtls.setReturningAttributes(returnedAtts); 

     //Specify the search scope 
     searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

     //specify the LDAP search filter 
     String searchFilter = "(&(objectClass=user))"; 

     //Specify the Base for the search 
     String searchBase = "dc=dom,dc=fr"; 
     //initialize counter to total the results 
     int totalResults = 0; 

     // Search for objects using the filter 
     NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls); 

     //Loop through the search results 
     while (answer.hasMoreElements()) 
     { 
     SearchResult sr = (SearchResult)answer.next(); 

     totalResults++; 

     System.out.println(">>>" + sr.getName()); 
     Attributes attrs = sr.getAttributes(); 
     System.out.println(">>>>>>" + attrs.get("samAccountName")); 
     } 

     System.out.println("Total results: " + totalResults); 
     ldapContext.close(); 
    } 
    catch (Exception e) 
    { 
     System.out.println(" Search error: " + e); 
     e.printStackTrace(); 
     System.exit(-1); 
    } 
    } 
} 
+0

इस अच्छे और आसान कोड के लिए बहुत बहुत धन्यवाद जो कि अन्य डेवलपर की तुलना में बहुत अधिक है –

11

आप JNDI और रन LDAP संचालन के माध्यम से सक्रिय निर्देशिका क्वेरी कर सकता है

http://docs.oracle.com/javase/tutorial/jndi/ldap/authentication.html
http://docs.oracle.com/javase/tutorial/jndi/ldap/operations.html
http://mhimu.wordpress.com/2009/03/18/active-directory-authentication-using-javajndi/

+0

तो मुझे यह तय करना चाहिए कि एलडीएपी या केर्बेरो का उपयोग करना है या नहीं? क्या सक्रिय निर्देशिका है जिसे मैं एक्सेस करने का प्रयास कर रहा हूं, Kerberos का समर्थन नहीं करता है? – rayman

+0

मुझे केर्बेरोज टीबी के साथ बहुत कम परिचितता है। क्या आप सिर्फ एडी के खिलाफ प्रमाणीकरण कर रहे हैं या आप डेटा को पढ़ने/लिखने की तरह अधिक करते हैं? यदि दूसरा संभवतः एलडीएपी, यदि पहले, वास्तव में सुनिश्चित नहीं है। – clyfe

+1

@rayman: केर्बेरो प्रमाणीकरण और प्रमाणीकरण के बारे में है। यदि आप निर्देशिका में संग्रहीत कुछ जानकारी को एलडीएपी का उपयोग करना चाहते हैं। आपका प्रश्न थोड़ा व्यापक है, शायद आप अपनी आवश्यकताओं को रेखांकित कर सकते हैं। – home

संबंधित मुद्दे