首先必须了解ldap,ldap相关可以问度娘。这边我重点要提的是dn(distinguished name),通俗的来说就是唯一标示。

然后现在可以先下一个ldapadmin,通过ldapadmin先连接已经配置好的ldap,下面是微软ad的图。

 

 

java连接ldap_迭代

比如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. }