zoukankan      html  css  js  c++  java
  • (转)用JAVA实现LDAP的访问

     转:http://junewolf.iteye.com/blog/52088

    1、简单介绍 

       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了。
     2、读操作
        下面来具体的说一下怎么用JLDAP。首先要去下载一下JLDAP,具体下载的地址可以上网去搜。下载下来以后,lib里面的是开发所要用到的包,doc里面是帮助文档API和示例程序。
        先说说怎么查询,其实查询非常的简单,如果用过JDBC连数据库的话,那么连LDAP相比起来更加的简单。
        首先建立一个LDAPConnection对象。这个对象也可以通过连接池PoolManager来获得。LDAPConnection con = new LDAPConnection();然后运行connect方法和bind方法。连接上LDAP以后,就可以通过search方法来查找数据了。示例程序如下:
           LDAPConnection lc = new LDAPConnection();   
           try {   
               lc.connect("6.1.19.154",389);   
               lc.bind(LDAPConnection.LDAP_V3,"cn=xxx","xxxxxx");   
               LDAPSearchResults rs = lc.search("dc=excel,dc=com,dc=cn",LDAPConnection.SCOPE_SUB,"objectClass=*",null,false);   
               int count = 0;   
               while(rs.hasMore()){   
                   LDAPEntry entry = rs.next();   
                   System.out.println(entry.getDN());   
                   count++;   
               }   
               System.out.println("共有"+count+"条记录。");   
           } catch (LDAPException e) {   
                 
               System.err.print("连接异常!   ");   
               e.printStackTrace();   
           }  


    3、写操作

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

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

    4、删除

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

      首先,连接LDAP服务器,然后通过DN来删除一个实体。
    示例代码如下:
    LDAPConnection con = new LDAPConnection();   
    con.connect("6.1.19.154",389);   
    con.bind(LDAPConnection.LDAP_V3,"cn=XXXX","XXXXXX");   
    con.delete("cn=JSmith,dc=excel,dc=com,dc=cn");   
    System.out.println("成功删除一条记录!");  
  • 相关阅读:
    dedecms(4)
    dedecms(3)
    jquery-submit:f[s] is not a function
    修改mysql字符集
    CentOS-6.3安装配置SVN[转载]
    centos下编译安装curl拓展
    CSS杂集(标准流&多行垂直居中)
    杂集一(yii自动登陆过程浅析)
    webservice连接超时处理
    JavaScript 实现触点式弹出菜单插件
  • 原文地址:https://www.cnblogs.com/wangle1001986/p/2734553.html
Copyright © 2011-2022 走看看