使用Java操作LDAP案例 博客分类: J2EE案例文档 javaldapUnboundid SDK
程序员文章站
2024-03-22 09:07:16
...
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 定义参数
3.3 建立连接
3.4 创建数据
1、创建DC对象
2、创建组织
3、创建组织单元
4、创建用户
3.5 修改数据
3.6 删除数据
3.7 查询数据
3.8 测试代码
4 解决结果
1、输出结果
2、使用LDAP客户端Apache Directory Studio连接LDAP服务查看LDAP数据,如下图所示
5 总结
从解决过程和解决结果,我们可知在Java中使用UnboundID LDAP SDK for Java所提供的API来操作LDAP,实现对LDAP数据进行增加、修改、删除、查询都很简单和易用。
6 源代码
完整测试代码请查看下面附件
完整代码点击这里下载
公司平台使用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 定义参数
// 当前配置信息 private static String ldapHost = "172.16.160.196"; private static int ldapPort = 389; private static String ldapBindDN = "cn=manager,dc=com";; private static String ldapPassword = "******"; private static LDAPConnection connection = null;
3.3 建立连接
/** 连接LDAP */ public static void openConnection() { if (connection == null) { try { connection = new LDAPConnection(ldapHost, ldapPort, ldapBindDN, ldapPassword); } catch (Exception e) { System.out.println("连接LDAP出现错误:\n" + e.getMessage()); } } }
3.4 创建数据
1、创建DC对象
/** 创建DC */ public static void createDC(String baseDN, String dc) { String entryDN = "dc=" + dc + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList<Attribute> attributes = new ArrayList<Attribute>(); attributes.add(new Attribute("objectClass", "top", "organization", "dcObject")); attributes.add(new Attribute("dc", dc)); attributes.add(new Attribute("o", dc)); connection.add(entryDN, attributes); System.out.println("创建DC" + entryDN + "成功!"); } else { System.out.println("DC " + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建DC出现错误:\n" + e.getMessage()); } }
2、创建组织
/** 创建组织 */ public static void createO(String baseDN, String o) { String entryDN = "o=" + o + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList<Attribute> attributes = new ArrayList<Attribute>(); attributes.add(new Attribute("objectClass", "top", "organization")); attributes.add(new Attribute("o", o)); connection.add(entryDN, attributes); System.out.println("创建组织" + entryDN + "成功!"); } else { System.out.println("组织" + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建组织出现错误:\n" + e.getMessage()); } }
3、创建组织单元
/** 创建组织单元 */ public static void createOU(String baseDN, String ou) { String entryDN = "ou=" + ou + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList<Attribute> attributes = new ArrayList<Attribute>(); attributes.add(new Attribute("objectClass", "top", "organizationalUnit")); attributes.add(new Attribute("ou", ou)); connection.add(entryDN, attributes); System.out.println("创建组织单元" + entryDN + "成功!"); } else { System.out.println("组织单元" + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建组织单元出现错误:\n" + e.getMessage()); } }
4、创建用户
/** 创建用户 */ public static void createEntry(String baseDN, String uid) { String entryDN = "uid=" + uid + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList<Attribute> attributes = new ArrayList<Attribute>(); attributes.add(new Attribute("objectClass", "top", "account")); attributes.add(new Attribute("uid", uid)); connection.add(entryDN, attributes); System.out.println("创建用户" + entryDN + "成功!"); } else { System.out.println("用户" + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建用户出现错误:\n" + e.getMessage()); } }
3.5 修改数据
/** 修改用户信息 */ public static void modifyEntry(String requestDN, Map<String,String> data) { try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(requestDN); if (entry == null) { System.out.println(requestDN + " user:" + requestDN + " 不存在); return; } // 修改信息 ArrayList<Modification> md = new ArrayList<Modification>(); for(String key : data.keySet()) { md.add(new Modification(ModificationType.REPLACE, key, data.get(key))); } connection.modify(requestDN, md); System.out.println("修改用户信息成!"); } catch (Exception e) { System.out.println("修改用户信息出现错误:\n" + e.getMessage()); } }
3.6 删除数据
/** 删除用户信息 */ public static void deleteEntry(String requestDN) { try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(requestDN); if (entry == null) { System.out.println(requestDN + " user:" + requestDN + "不存在"); return; } // 删除 connection.delete(requestDN); System.out.println("删除用户信息成!"); } catch (Exception e) { System.out.println("删除用户信息出现错误:\n" + e.getMessage()); } }
3.7 查询数据
/** 查询 */ public static void queryLdap(String searchDN, String filter) { try { // 连接LDAP openConnection(); // 查询企业所有用户 SearchRequest searchRequest = new SearchRequest(searchDN, SearchScope.SUB, "(" + filter + ")"); searchRequest.addControl(new SubentriesRequestControl()); SearchResult searchResult = connection.search(searchRequest); System.out.println(">>>共查询到" + searchResult.getSearchEntries().size() + "条记录"); int index = 1; for (SearchResultEntry entry : searchResult.getSearchEntries()) { System.out.println((index++) + "\t" + entry.getDN()); } } catch (Exception e) { System.out.println("查询错误,错误信息如下:\n" + e.getMessage()); } }
3.8 测试代码
public static void main(String[] args) { String root = "com"; String dc = "truesens"; String o = "kedacom"; String ou = "people"; String uid = "admin"; String filter = "objectClass=account"; createDC("dc=" + root, dc); createO("dc=" + dc + ",dc=" + root, o); createOU("o=" + o + ",dc=" + dc + ",dc=" + root, ou); createEntry("ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc=" + root, uid); queryLdap("ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc=" + root, filter); HashMap<String,String> data = new HashMap<String,String>(0); data.put("userid", uid); modifyEntry("uid="+uid+",ou="+ou+",o="+o+",dc="+dc+",dc="+root, data); deleteEntry("uid="+uid+",ou="+ou + ",o="+o+",dc=" + dc + ",dc=" + root); queryLdap("ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc=" + root, filter); }
4 解决结果
1、输出结果
创建代理商dc=truesens,dc=com成功! 创建组织o=kedacom,dc=truesens,dc=com成功! 创建组织单元ou=people,o=kedacom,dc=truesens,dc=com成功! 创建用户uid=admin,ou=people,o=kedacom,dc=truesens,dc=com成功! >>>共查询到1条记录 1 uid=admin,ou=people,o=kedacom,dc=truesens,dc=com 修改用户信息成功! 删除用户信息成功! >>>共查询到0条记录
2、使用LDAP客户端Apache Directory Studio连接LDAP服务查看LDAP数据,如下图所示
5 总结
从解决过程和解决结果,我们可知在Java中使用UnboundID LDAP SDK for Java所提供的API来操作LDAP,实现对LDAP数据进行增加、修改、删除、查询都很简单和易用。
6 源代码
完整测试代码请查看下面附件
完整代码点击这里下载