`
ywChen
  • 浏览: 118071 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用JAVA实现LDAP的访问

阅读更多

文章来自http://liumingm.iteye.com/blog/288756

<一>

    LDAP现在用的越来越多,所谓LDAP既Lightweight Directory Access Protocol。关于它的一些基本知识,我在这里就不做系统的介绍了,网上有很多的资料。我主要说一下在JAVA的语言环境中,怎样来操作LDAP。
    在这里,我推荐两个工具:LDAPTemplate和JLDAP。
    网上的资料比较少,而且不少都是E文的,可能英语不太好的朋友,就很难入门了。在这我把我的经验总结一下,和大家分享。
    LDAPTemplate是基于Spring1.2.7来开发的,其用法和Spring的JDBCTemplate差不多。最初,我是用这个开源的框架来对LDAP进行操作的,但是后来由于开发工具的转变,由eclipse转到了RAD上,而RAD所用的JDK却不支持Spring1.2.7(看来网上的谣传没错,IBM总在某个阴暗的角落在和SUN作对),没办法,只好另辟蹊径。后来发现了JLDAP,经过一番研究,发现它用起来并不比LDAPTemplate复杂,但在对象持久化方面需要自己去做,而LDAPTemplate通过AttributeMappers就可以把查询到的结果转换成POJO了。

 

<二>

    下面来具体的说一下怎么用JLDAP。首先要去下载一下JLDAP,具体下载的地址可以上网去搜。下载下来以后,lib里面的是开发所要用到的包,doc里面是帮助文档API和示例程序。

    先说说怎么查询,其实查询非常的简单,如果用过JDBC连数据库的话,那么连LDAP相比起来更加的简单。
    首先建立一个LDAPConnection对象。这个对象也可以通过连接池PoolManager来获得。LDAPConnection con = new LDAPConnection();然后运行connect方法和bind方法。连接上LDAP以后,就可以通过search方法来查找数据了。示例程序如下:
Java代码  收藏代码
  1. LDAPConnection lc = new LDAPConnection();      
  2.        try {      
  3.            lc.connect("6.1.19.154",389);      
  4.            lc.bind(LDAPConnection.LDAP_V3,"cn=xxx","xxxxxx");      
  5.            LDAPSearchResults rs = lc.search("dc=excel,dc=com,dc=cn",LDAPConnection.SCOPE_SUB,"objectClass=*",null,false);      
  6.            int count = 0;      
  7.            while(rs.hasMore()){      
  8.                LDAPEntry entry = rs.next();      
  9.                System.out.println(entry.getDN());      
  10.                count++;      
  11.            }      
  12.            System.out.println("共有"+count+"条记录。");      
  13.        } catch (LDAPException e) {      
  14.                 
  15.            System.err.print("连接异常!   ");      
  16.            e.printStackTrace();      
  17.        }     
  

<三>

    虽然LDAP主要是用来进行读操作的,但不可避免的,我们也要向其中添加一些新的数据。用JLDAP向LDAP服务器添加数据的操作也是非常简单的。

    为什么说非常简单呢,因为大体上也就是分三步。第一步,连接LDAP服务器。第二步,建立一个要添加的新的实体LDAPEntry,并添加相应的属性。第三步,通过add方法向LDAP中添加实体。
    首先说连接服务器。还是非常简单的三步:
Java代码  收藏代码
  1. LDAPConnection con = new LDAPConnection();      
  2.  con.connect("hostname",hostport);      
  3.  con.bind("version","DN","password");     
 
    连接后,可以建实体了,也就相当与为数据库添加一条新的记录。这里用到了几个类:LDAPEntry、LDAPAttribute和LDAPAttributeSet。首先建立一个LDAPAttributeSet,然后建立各种的LDAPAttribute,把他们add到LDAPAttributeSet中。然后建立一个LDAPEntry。其构造函数有两个参数,一个是这个LDAPEntry的DN,一个是他的属性集合,也就是LDAPAttributeSet。
     最后,调用LDAPConnection实例化对象的add方法,把实体添加到服务器中。然后别忘了断开连接喔。整体的示例代码如下:
Java代码  收藏代码
  1. LDAPAttributeSet attributeSet = new LDAPAttributeSet();     
  2. attributeSet.add(new LDAPAttribute("objectclass"new String("inetOrgPerson")));     
  3. attributeSet.add(new LDAPAttribute("cn"new String[] { "李""Jim Smith""Jimmy Smith" }));     
  4. attributeSet.add(new LDAPAttribute("givenname"new String[] { "测试""Jim""Jimmy" }));     
  5. attributeSet.add(new LDAPAttribute("sn"new String("Smith")));     
  6. attributeSet.add(new LDAPAttribute("telephonenumber"new String("1 801 555 1212")));     
  7. attributeSet.add(new LDAPAttribute("mail"new String("JSmith@Acme.com")));     
  8. attributeSet.add(new LDAPAttribute("userpassword"new String("newpassword")));     
  9. LDAPEntry entry = new LDAPEntry("cn=李,cn=Lizl,dc=excel,dc=com,dc=cn", attributeSet);     
  10. LDAPConnection con = new LDAPConnection();     
  11. con.connect("6.1.19.154"389);     
  12. con.bind(LDAPConnection.LDAP_V3, "cn=XXX""XXXXXX");     
  13. con.add(entry);     
  14. System.out.println("成功的添加了一条记录!");     
  15. con.disconnect();    
 

<四>

    这里来说一说怎么从LDAP中删除一个实体。

    首先,连接LDAP服务器,然后通过DN来删除一个实体。
    示例代码如下:
Java代码  收藏代码
  1. LDAPConnection con = new LDAPConnection();      
  2. con.connect("6.1.19.154",389);      
  3. con.bind(LDAPConnection.LDAP_V3,"cn=XXXX","XXXXXX");      
  4. con.delete("cn=JSmith,dc=excel,dc=com,dc=cn");      
  5. System.out.println("成功删除一条记录!");                                                                            




分享到:
评论

相关推荐

    用JAVA实现LDAP的访问.txt

    用JAVA实现LDAP的访问.txt 用JAVA实现LDAP的访问.txt

    JAVA_API1.6文档(中文)

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    java开源包4

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    springboot-ldap:该项目的目标是创建一个简单的Spring-Boot REST API(称为简单服务),并使用Spring Security LDAP模块对其进行保护。

    GET /api/private :只有使用有效LDAP凭证进行身份验证的用户才能访问。 先决条件 启动环境 打开一个终端,并在springboot-ldap根文件夹中运行 docker-compose up -d 通过运行检查其状态 docker-compose ps 导入...

    JAVA上百实例源码以及开源项目

    百度云盘分享 ... Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText();...

    JAVA上百实例源码以及开源项目源代码

     Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。  部分源代码摘录:  ftpClient = new FtpClient(); //实例化FtpClient对象  String serverAddr=jtfServer.getText(); //得到服务器地址  ...

    java开源包3

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    Java 1.6 API 中文 New

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    java开源包8

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包11

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包101

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包6

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包9

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包5

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java开源包10

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    java api最新7.0

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    java开源包1

    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

    JavaAPI1.6中文chm文档 part1

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

    LDAP技术,LDAP学习大全

    第一节Sun 公司的JNDI 与各厂商实现的LDAP 函数库关系....................................... 32 1 Novell 函数库:.............................................................................................

Global site tag (gtag.js) - Google Analytics