最近因为项目需要,研究了下大名久仰的LDAP。它以目录树结构存放数据信息,和数据库以表结构存放数据不同。网络上关于LDAP的介绍很多,不是本文的重点。作为程序员,最关心的就是如何写程序去访问和操作LDAP数据,这也是本文所要讨论的,但是局限于java程序。
一.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月被ORACLE并购,网络上难以找到相关的资料,唯一可以参考的资料是其所带的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类。
分享到:
相关推荐
Java 语言通过 JNDI(Java Naming and Directory Interface)提供了对 LDAP(Lightweight Directory Access Protocol)的支持,允许开发者通过 Java 语言来操作 LDAP 服务器。LDAP 是一种常用的目录服务协议,用于...
总的来说,Java通过Ldap操作AD域涉及网络连接、身份验证、目录查询以及可能的SSL安全通信。理解这些概念和API的使用是实现AD域集成的关键。通过以上介绍和示例代码,你应该能够开始编写自己的AD域操作功能。记得在...
Java 操作 LDAP 的简单实例 ...通过这个示例,我们可以了解 Java 中访问 LDAP 服务器的基本方法和技术,例如连接 LDAP 服务器、执行搜索操作、获取搜索结果等。这个示例可以作为我们开发 Java 应用程序的参考和指导。
Java操作LDAP(Lightweight Directory Access Protocol)是一种常见的方式,用于在分布式环境中管理和访问目录信息。在Java中,我们可以使用各种库来实现与LDAP服务器的交互,这些库提供了丰富的API,使得开发人员...
4. 创建、更新和删除条目:使用`DirContext`的`createSubcontext`、`modifyAttributes`和`removeSubcontext`方法对目录中的条目进行操作。 SSL在其中的角色是提供安全的网络通信。当与LDAP服务器建立连接时,使用...
Java LDAP操作同样适用于连接和操作OpenLDAP服务器。 ### 5. 示例代码 在`LDAPTest`文件中,你可能会找到一个完整的Java程序,演示了上述的各种操作。这个程序可能包含了连接LDAP服务器、搜索用户、修改用户信息等...
- `ldap.jar`:提供对LDAP协议的具体实现。 - `providerutil.jar`:可能需要,根据具体实现,用于处理服务提供者注册。 这些JAR文件通常在Java的JDK或JRE的`lib`目录下,或者作为第三方库(如Apache Directory ...
本文将详细介绍如何使用Java来实现对LDAP的访问,主要探讨两种方式:使用`LDAPTemplate`和使用`JLDAP`。 #### 二、使用LDAPTemplate访问LDAP ##### 2.1 LDAPTemplate介绍 `LDAPTemplate`是Spring框架中提供的一种...
Java操作LDAP( Lightweight Directory Access Protocol)在SpringBoot工程中的实现主要涉及到的是企业级的身份验证与目录服务。LDAP是一种开放的标准协议,广泛用于存储用户账户、组信息和其他元数据。在这个项目中...
在这篇文章中,我们将探讨使用 JAVA 实现 LDAP 的 AD 域免证书查询、修改、删除、新增、启用、禁用和修改密码的操作。 首先,让我们了解什么是 LDAP 和 AD 域。LDAP(Lightweight Directory Access Protocol)是一...
**Java中的LDAP操作** Java提供了一套API,名为`JNDI`(Java Naming and Directory Interface),用于与各种命名和目录服务,包括LDAP,进行交互。JNDI提供了一种标准的方法来查找、绑定和管理命名和目录对象。 1....
这个API包含在Java的`javax.naming`和`javax.naming.ldap`包中,提供了丰富的类和接口,如`InitialLdapContext`、`NamingEnumeration`和`DirContext`等,使得开发者能够方便地执行LDAP操作,如查找、添加、删除和...
2. `LdapContext`:扩展了`DirContext`,包含了更具体的LDAP操作方法,如搜索、修改等。 3. `NamingEnumeration`:用于遍历目录服务中的结果集。 **三、连接LDAP服务器** 连接LDAP服务器通常涉及以下步骤: 1. 创建...
总结,Java LDAP操作涉及连接LDAP服务器、执行查询、添加、修改和删除条目。理解并熟练掌握这些基本操作对于处理需要与LDAP交互的项目至关重要。通过创建实用工具类,可以提高代码的可重用性和可维护性,使开发更加...
LDAP操作 #### 4.1 搜索 使用`NamingEnumeration<SearchResult>`接口执行搜索操作。 ```java SearchControls controls = new SearchControls(); controls.setSearchScope(SearchControls.SUBTREE_SCOPE); String ...
Java操作LDAP(轻量级目录访问协议)是企业级应用中常见的任务,特别是在管理AD(活动目录)域用户时。本项目提供了一种便捷的方式,允许开发者在Java环境中创建、管理和更新AD域中的用户信息,并且可以直接在...
《LDAP编程与Java》这本书是关于使用Java进行 Lightweight Directory Access Protocol (LDAP) 开发的指南。LDAP是一种开放标准的网络协议,用于访问和管理分布式目录服务。它在企业级应用中广泛使用,如用户身份验证...
**使用Java进行LDAP操作时,主要涉及以下几个步骤:** 1. **连接 LDAP 服务器**:首先,需要建立一个环境属性对象,并配置 LDAP 服务器的URL、端口、基础DN(Distinguished Name)等信息。然后,使用...
### JAVA中使用LDAP进行用户认证的关键知识点 #### LDAP简介与特性 LDAP,即轻量级目录访问协议(Lightweight Directory Access Protocol),源自X.500标准,但更简化且可定制。它支持TCP/IP协议,是互联网环境下...
在处理LDAP操作时,需要捕获并处理可能抛出的异常,如`NamingException`、`AuthenticationException`等。 ### 7. 关闭连接 操作完成后,记得关闭与LDAP服务器的连接: ```java ldapContext.close(); ``` ### 8. ...