技术预研:Java操作Ldap的方式与比较

前言

因为项目原因,需要通过Java操作Ldap,实现对Ldap的管理。在实际的技术选型中,面临着多种问题需要考虑。查阅了相关资料,发现主流Java+Ldap集成主要有三种方法换句话说,三项技术。

1、JNDI

  和JDBC类似,JNDI则是Java中用于访问LDAP的API,开发人员使用JNDI完成与LDAP Server之间的通信,即用JNDI来访问LDAP,而不需要和具体的目录服务产品特性打交道。这样通过LDAP、JNDI两层抽象,使Java程序对目录服务的访问做到了平台无关性。

  就像Spring 对Java JDBC进行封装了一样,Spring 同样也对JNDI进行了封装,可以大大简化冗余代码的书写,基本使用参照Spring Ldap(https://spring.io/projects/spring-ldap)

2、UnboundID SDK

  一个由第三方公司Ping Identity开发并维护的项目,用于Java Ldap操作的实现,项目地址:https://github.com/pingidentity/ldapsdk

 

   在Github以及官方文档的介绍中,给我的感觉是很轻量级,并且有着较快的速度,但在后来的实践过程中发现UnboundID Ldap有一个比较坑功能没有实现(下文会提到),相比上文所述的JNDI与Spring-Ldap,所以在这里并不建议大家使用。

3、Netscape SDK

  对此没有做过过多研究,在这里不做过多说明,详见参考文档:https://docs.oracle.com/cd/E19957-01/816-6402-10/api.htm

选型

在实际的选择中我选择了第二种UnboundID LDAP,但后来发现,有个坑始终无法解决并绕过,只有换框架,为此造成了很多时间的浪费,希望在这里能替其他同学规避。

在开发中,需要实现批量新建Ldap 用户,如果在其中新建某条出现错误,需要回滚,此时对技术transaction支持就会有要求,我当时在查阅很多资料后发现,我选用的UnboundID Ldap 并不支持transaction,就会陷入比较尴尬和麻烦的阶段,无奈只好换用spring-ldap。

在这里附上Ldap Specification 以及三种技术的支持情况,就能很直观明了的看出来哪种技术更强大,该选用哪种技术,附链接地址:https://docs.ldap.com/ldap-sdk/docs/advantages/specifications.html

 

posted @ 2020-08-05 16:37  JiangnanVL  阅读(484)  评论(0)    收藏  举报