java 访问ldap_java对LDAP的访问方式

一.JNDI(JAVA 命名及目录接口) JNDI是JAVA为命名及目录服务访问制定的基础接口标准,用于访问包括DNS,NIS,LDAP,文件系统等任何以树目录形式存在目标对象,并且基本上可保持访问方式的一致(意味着代码共用)。对于不同的目录类型,JNDI通过使用不同的目录驱动,以保证访问方式的一致。以下连接可获得较详细的讲解和例程:http://java.sun.com/products/jndi/tutorial/。经常使用的LDAP驱动有JDK自带的LDAP provider,还有IBM的PROVIDER,以及NOVEL的JNDI产品。 二.jldap JLDAP是由Novell开发的,原是针对Novel的NDS目录设计的JAVA访问工具。NOVEL的NDS和网景(NETSCAPE)的目录是工具界最早的目录产品。JLDAP并非JNDI的服务供应者,而是同一抽象层次下的访问工具集。与JNDI-LDAP相比,JLDAP更接近于类关系数据库的访问方式。NDS是遵守LDAP协议的并进行了扩展的类MAD产品。而NOVEL也已把JLDAP捐献给了OPENLDAP开源项目,可以世界范围内自由使用。与JNDI相比,JLDAP无须继承DirContext才能实现添加,也无需预先生成添加的类,可以象普通数据访问那样,生成连接,然后使用 add方法添加。这样,添加的灵活性要强于JNDI。 三.JdbcLDAP驱动 网络上有2种形式的jdbc-Ldap驱动程序,提供以sql的语法访问ldap数据库。 1.OcterString的开源驱动 http://www.openldap.org/jdbcldap/提供下载。但是由于2005年11月被OERACLE并购,网络上难以找到相关的资料,唯一可以参考的资料是其所带的JDBC-LDAP Getting Started.pdf文档。最初的1.0版本在连接时会有错误抛出,却可以正常执行sql操作。通过自己编译source可以得到较高的版本(难以找到最新版本的jar包),此版本可以正常使用。值得注意的是,在文档中,关于删除操作的ps.excute(SQL)有问题,应该改成ps.excute (),不应该带参数,因为delete操作不会返回结果,否则会产生空指针异常(NullPointerException)。实际上,这个驱动引用了上面提到的jldap类库。在使用过程中,发现了本驱动的一些bug。 其一,查询结果集比实际数据多一条NULL的记录,所以在取数据时的循环判断要追加其它条件; 其二,查询记录后,会采用Base64的算法对数据进行压缩,但是对中文字符处理后会产生失真现象。需要更改 com.octetstring.jdbcLdap.jndi.UnpackResults.java源代码。文件中对查询结果进行了 Base64.encode()的处理。而Base64是由novell提供的ldap.jar包中的 com.novell.ldap.util.Base64.java类。去除Base64的处理并进行适当的更改,能够正常显示中文。根据novell的 ldap.jar包的API文档,Base64处理用于转换字符流为不可直接识别的字节码,并且转换后的数据量只有转换之前的33%,节省了空间,提高了效率,但是对CJK文本的转换会失真。 另外,由于使用了jdbcldap驱动,考虑把LDAP数据库的节点映射为一个表,把节点属性作为表项,采用 Hibernate框架进行数据操作,这种思想在做现存的Hibernate框架实现的系统转LDAP单点登录时,是一种理想方案。实际上,这样的映射可行,但是由于没有合适的Hibernate Dialect方言,转换出来的SQL操作无法正常执行。这种方案需要自行实现一个合适的Hibernate Dialect类。 2.Novell的jdbcldap驱动 http://developer.novell.com/ndk/ldapjdbc.htm,Novell提供的专用于它的 eDirectory产品的驱动,只提供了查询操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值