1 案例描述
公司平台使用LDAP来储存企业或用户的信息,在系统的运行过程中需要对LDAP存储的信息进行相关的访问和操作,那么在Java中是如何操作LDAP的呢?

2 案例分析
LDAP是一个得到关于人或者资源的集中、静态数据的快速方式,是一种存储模式和访问协议。
UnboundID LDAP SDK for Java是一个快速、综合易用的 LDAP 目录服务的 Java 客户端API,它提供了一套快速、强大、用户友好并且开源的Java API来与LDAP目录服务器交互,可读写 LDIF、使用BASE64 和 ASN.1 BER 进行编码解码,支持安全通信等特性,要求 Java 1.5 或者更新版本支持,同时也支持 Android 平台。与其它基于Java的LDAP APIs相比,它具有更好的性能、更易于使用,功能更多,而且还是唯一一个不断有活跃开发和增强的SDK。
在软件开发中,对数据的操作无非就是增加、删除、修改、查询等4种操作,对LDAP的操作也一样。下面我们一起探讨在Java中如何使用UnboundID LDAP SDK操作LDAP。

3 解决过程
3.1 准备
1、Java客户端API(UnboundID LDAP SDK for Java)
下载地址 http://sourceforge.net/projects/ldap-sdk/files/

2、LDAP客户端(Apache Directory Studio)
下载地址 http://directory.apache.org/studio/

3.2 定义参数

java 验证 ldap用户 java ldaps_java 验证 ldap用户


1. // 当前配置信息
2. private static String ldapHost = "172.16.160.196";  
3. private static int ldapPort = 389;  
4. private static String ldapBindDN = "cn=manager,dc=com";;  
5. private static String ldapPassword = "******";  
6. private static LDAPConnection connection = null;



3.3 建立连接


java 验证 ldap用户 java ldaps_java 验证 ldap用户



1. /** 连接LDAP */
2. public static void
3. if (connection == null) {  
4. try
5. new
6. catch
7. "连接LDAP出现错误:\n"
8.         }  
9.     }  
10. }



3.4 创建数据


1、创建DC对象


java 验证 ldap用户 java ldaps_java 验证 ldap用户



1. /** 创建DC */
2. public static void
3. "dc=" + dc + ","
4. try
5. // 连接LDAP
6.         openConnection();  
7.           
8.         SearchResultEntry entry = connection.getEntry(entryDN);  
9. if (entry == null) {  
10. // 不存在则创建
11. new
12. new Attribute("objectClass", "top", "organization", "dcObject"));  
13. new Attribute("dc", dc));  
14. new Attribute("o", dc));  
15.             connection.add(entryDN, attributes);  
16. "创建DC" + entryDN + "成功!");  
17. else
18. "DC " + entryDN + "已存在!");  
19.         }  
20. catch
21. "创建DC出现错误:\n"
22.     }  
23. }



2、创建组织


java 验证 ldap用户 java ldaps_java 验证 ldap用户



    1. /** 创建组织 */
    2. public static void
    3. "o=" + o + ","
    4. try
    5. // 连接LDAP
    6.         openConnection();  
    7.           
    8.         SearchResultEntry entry = connection.getEntry(entryDN);  
    9. if (entry == null) {  
    10. // 不存在则创建
    11. new
    12. new Attribute("objectClass", "top", "organization"));  
    13. new Attribute("o", o));  
    14.             connection.add(entryDN, attributes);  
    15. "创建组织" + entryDN + "成功!");  
    16. else
    17. "组织" + entryDN + "已存在!");  
    18.         }  
    19. catch
    20. "创建组织出现错误:\n"
    21.     }  
    22. }



    3、创建组织单元


    java 验证 ldap用户 java ldaps_java 验证 ldap用户


    1. /** 创建组织单元 */
    2. public static void
    3. "ou=" + ou + ","
    4. try
    5. // 连接LDAP
    6.         openConnection();  
    7.           
    8.         SearchResultEntry entry = connection.getEntry(entryDN);  
    9. if (entry == null) {  
    10. // 不存在则创建
    11. new
    12. new Attribute("objectClass", "top", "organizationalUnit"));  
    13. new Attribute("ou", ou));  
    14.             connection.add(entryDN, attributes);  
    15. "创建组织单元" + entryDN + "成功!");  
    16. else
    17. "组织单元" + entryDN + "已存在!");  
    18.         }  
    19. catch
    20. "创建组织单元出现错误:\n"
    21.     }  
    22. }



    4、创建用户


    java 验证 ldap用户 java ldaps_java 验证 ldap用户


    1. /** 创建用户 */
    2. public static void
    3. "uid=" + uid + ","
    4. try
    5. // 连接LDAP
    6.         openConnection();  
    7.           
    8.         SearchResultEntry entry = connection.getEntry(entryDN);  
    9. if (entry == null) {  
    10. // 不存在则创建
    11. new
    12. new Attribute("objectClass", "top", "account"));  
    13. new Attribute("uid", uid));  
    14.             connection.add(entryDN, attributes);  
    15. "创建用户" + entryDN + "成功!");  
    16. else
    17. "用户" + entryDN + "已存在!");  
    18.         }  
    19. catch
    20. "创建用户出现错误:\n"
    21.     }  
    22. }


    3.5 修改数据


    java 验证 ldap用户 java ldaps_java 验证 ldap用户



      1. /** 修改用户信息 */
      2. public static void
      3. try
      4. // 连接LDAP
      5.         openConnection();  
      6.           
      7.         SearchResultEntry entry = connection.getEntry(requestDN);  
      8. if (entry == null) {  
      9. " user:"
      10. return;  
      11.         }  
      12. // 修改信息
      13. new
      14. for(String key : data.keySet()) {  
      15. new
      16.         }  
      17.         connection.modify(requestDN, md);  
      18.   
      19. "修改用户信息成!");  
      20. catch
      21. "修改用户信息出现错误:\n"
      22.     }  
      23. }

      3.6 删除数据


      java 验证 ldap用户 java ldaps_java 验证 ldap用户



        1. /** 删除用户信息 */
        2. public static void
        3. try
        4. // 连接LDAP
        5.         openConnection();  
        6.           
        7.         SearchResultEntry entry = connection.getEntry(requestDN);  
        8. if (entry == null) {  
        9. " user:" + requestDN + "不存在");  
        10. return;  
        11.         }  
        12. // 删除
        13.         connection.delete(requestDN);  
        14. "删除用户信息成!");  
        15. catch
        16. "删除用户信息出现错误:\n"
        17.     }  
        18. }

        3.7 查询数据


        java 验证 ldap用户 java ldaps_java 验证 ldap用户


        1. /** 查询 */
        2. public static void
        3. try
        4. // 连接LDAP
        5.         openConnection();  
        6.           
        7. // 查询企业所有用户
        8. new SearchRequest(searchDN, SearchScope.SUB, "(" + filter + ")");  
        9. new
        10.         SearchResult searchResult = connection.search(searchRequest);  
        11. ">>>共查询到" + searchResult.getSearchEntries().size() + "条记录");  
        12. int index = 1;  
        13. for
        14. "\t"
        15.         }  
        16. catch
        17. "查询错误,错误信息如下:\n"
        18.     }  
        19. }


        3.8 测试代码


        java 验证 ldap用户 java ldaps_java 验证 ldap用户



          1. public static void
          2. "com";  
          3. "truesens";  
          4. "kedacom";  
          5. "people";  
          6. "admin";  
          7. "objectClass=account";  
          8.   
          9. "dc="
          10. "dc=" + dc + ",dc="
          11. "o=" + o + ",dc=" + dc + ",dc="
          12. "ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc="
          13. "ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc="
          14.       
          15. new HashMap<String,String>(0);  
          16. "userid", uid);  
          17. modifyEntry("uid="+uid+",ou="+ou+",o="+o+",dc="+dc+",dc="+root, data);  
          18.       
          19. "uid="+uid+",ou="+ou + ",o="+o+",dc=" + dc + ",dc="
          20. "ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc="
          21. }


          4 解决结果


          1、输出结果


          java 验证 ldap用户 java ldaps_java 验证 ldap用户



          1. 创建代理商dc=truesens,dc=com成功!  
          2. 创建组织o=kedacom,dc=truesens,dc=com成功!  
          3. 创建组织单元ou=people,o=kedacom,dc=truesens,dc=com成功!  
          4. 创建用户uid=admin,ou=people,o=kedacom,dc=truesens,dc=com成功!  
          5. >>>共查询到1条记录  
          6. 1
          7. 修改用户信息成功!  
          8. 删除用户信息成功!  
          9. >>>共查询到0条记录




          2、使用LDAP客户端Apache Directory Studio连接LDAP服务查看LDAP数据,如下图所示




          5 总结


          从解决过程和解决结果,我们可知在Java中使用UnboundID LDAP SDK for Java所提供的API来操作LDAP,实现对LDAP数据进行增加、修改、删除、查询都很简单和易用。