首先必须了解ldap,ldap相关可以问度娘。这边我重点要提的是dn(distinguished name),通俗的来说就是唯一标示。
然后现在可以先下一个ldapadmin,通过ldapadmin先连接已经配置好的ldap,下面是微软ad的图。
比如administrator这个用户的dn就是cn=administrator,cn=users,dc=ds-66,dc=com(简单来说就是全路径+域的形式)
最后就可以编码了,连接的代码比较简单,使用fliter的查询部门稍微复杂点,不过仔细看看也很容易理解,如下。
1. public static void main(String[] args) {
2. "ldap://10.1.0.66:389/";
3. "dc=ds-66,dc=com";
4. "cn=administrator,cn=users";
5. "111111";
6. new Hashtable<String, String>();
7. "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP 工厂
8. "simple"); // LDAP访问安全级别
9. env.put(Context.PROVIDER_URL, url);
10. ","+domain); // 填DN
11. // AD Password
12. "java.naming.ldap.attributes.binary", "objectSid objectGUID");
13. null;
14. try {
15. new InitialLdapContext(env , null);
16. queryGroup(ldapCtx);
17. //queryUser(ldapCtx);
18.
19. catch (NamingException e) {
20. e.printStackTrace();
21. finally {
22. if(ldapCtx != null) {
23. try {
24. ldapCtx.close();
25. catch (NamingException e) {
26. }
27. }
28. }
29. }
30.
31. private static void queryGroup(LdapContext ldapCtx) throws NamingException {
32. new SearchControls();
33. searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
34. "objectClass=organizationalUnit";
35. "ou=myDeptSubDept,ou=myDept,dc=DS-66,dc=com";
36. "distinguishedName", "objectGUID", "name"};
37. searchCtls.setReturningAttributes(returnedAtts);
38. NamingEnumeration<SearchResult> answer = ldapCtx.search(searchBase, searchFilter, searchCtls);
39. while (answer.hasMoreElements()) {
40. SearchResult sr = answer.next();
41. Attributes Attrs = sr.getAttributes();
42. if (Attrs != null) {
43. NamingEnumeration<?> ne = Attrs.getAll();
44. while(ne.hasMore()) {
45. Attribute Attr = (Attribute)ne.next();
46. String name = Attr.getID();
47. Enumeration<?> values = Attr.getAll();
48. if (values != null) { // 迭代
49. while (values.hasMoreElements()) {
50. "";
51. if("objectGUID".equals(name)) {
52. byte[]) values.nextElement()).toString();
53. else {
54. value = (String)values.nextElement();
55. }
56. " " + value);
57. }
58. }
59. }
60. "=====================");
61. }
62. }
63.
64. }