जावा का उपयोग कर सक्रिय निर्देशिका में सभी समूहों के नाम प्राप्त करने का कोई तरीका है?एलडीएपी: सक्रिय निर्देशिका में सभी समूह कैसे प्राप्त करें?
उत्तर
जावा जेएनडीआई का प्रयोग करें, और (ऑब्जेक्ट क्लास = समूह) के लिए एक खोज करें और सीएन विशेषता का अनुरोध करें। यह सभी समूह का नाम प्राप्त करेगा।
कोड उदाहरण:
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class Test {
public static String ldapUri = "ldap://localhost";
public static String usersContainer = "cn=users,dc=example,dc=com";
public static void main(String args[]) {
if (args.length != 2) {
System.out.println("Usage: test userName password");
return;
}
String username = args[0];
String password = args[1];
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUri);
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext ctx = new InitialDirContext(env);
SearchControls ctls = new SearchControls();
String[] attrIDs = { "cn" };
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
NamingEnumeration answer = ctx.search(usersContainer, "(objectclass=group)", ctls);
while (answer.hasMore()) {
SearchResult rslt = (SearchResult) answer.next();
Attributes attrs = rslt.getAttributes();
System.out.println(attrs.get("cn"));
}
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
उत्तर के लिए धन्यवाद। जब मैं इसका उपयोग करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है: "javax.naming.NamingException: [LDAP: त्रुटि कोड 1 - 00000000: LdapErr: DSID-0C090627, टिप्पणी: इस ऑपरेशन को करने के लिए कनेक्शन पर एक सफल बाध्य पूरा होना चाहिए ।, डेटा 0, vece "कोई विचार? – user709389
ऐसा लगता है कि आपने सही तरीके से प्रमाणीकृत नहीं किया है। क्या आप सही एलडीएपी सर्वर से कनेक्ट कर रहे हैं? क्या आपका उपयोगकर्ता एफडीएन सही है (जैसे सीएन = प्रशासक, सीएन = उपयोगकर्ता, डीसी = उदाहरण, डीसी = कॉम) और क्या आपका पासवर्ड सही है? – kalyan
हां, मेरा पीडब्ल्यू गलत था (बेवकूफ मुझे)। वैसे भी, अब मुझे निम्न मिलता है: "javax.naming.AuthenticationException: [LDAP: त्रुटि कोड 49 - 80090308: LdapErr: DSID-0C090334, टिप्पणी: AcceptSecurityContext त्रुटि, डेटा 525, vece" – user709389
आप इस लाइब्रेरी का उपयोग कर सकते हैं। यह इस्तेमाल करने में आसान और शक्तिशाली
मैं दलों के लिए क्वेरी करने के लिए कल्याण के उदाहरण का इस्तेमाल किया है, लेकिन पाया गया कि यद्यपि क्वेरी काम किया, यह सब उपयोगकर्ता समूह दिए नहीं किया है। कुछ खुदाई के बाद, मैं एडी ग्लोबल कैटलॉग और this example पर आधारित हो गया, मैं वैश्विक सूची से सभी उपयोगकर्ता समूहों को वापस करने के लिए कल्याण के उत्तर को संशोधित करने में सक्षम था।
आवश्यक परिवर्तन किए गए:
- जोड़ा वैश्विक बंदरगाह
3268
ldapUri पहले पैरामीटर सेट करने के लिए
Context.search
को""
करने के लिए।public static void main(String args[]) { String ldapUri = "ldap://ad.domain.com"; if (args.length != 2) { System.out.println("Usage: test userName password"); return; } String username = args[0]; String password = args[1]; Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapUri + ":3268"); env.put(Context.SECURITY_PRINCIPAL, username); env.put(Context.SECURITY_CREDENTIALS, password); try { DirContext context = new InitialDirContext(env); SearchControls searchControls = new SearchControls(); String[] attrIDs = {"cn"}; searchControls.setReturningAttributes(attrIDs); searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration answer = context.search("", "(objectclass=group)", searchControls); while (answer.hasMore()) { SearchResult rslt = (SearchResult) answer.next(); Attributes attrs = rslt.getAttributes(); System.out.println(attrs.get("cn")); } context.close(); } catch (NamingException e) { e.printStackTrace(); } }
आप स्प्रिंग LDAP का उपयोग कर रहे हैं? – lobster1234