发明内容
本发明所要解决的技术问题是提供一种JAVA语言对LDAP的访问操作的方法及系统,目的在于简化现有技术中对LDAP访问和操作,提高对LDAP的访问和操作的效率。
本发明解决上述技术问题的技术方案如下:
一种JAVA语言对LDAP的访问操作的系统,它包括LDAP客户端、工具类和LDAP服务器,
客户端,封装JNDI,设置配置文件及参数,客户端通过连接池连接LDAP服务器;
LDAP服务器,提供轻量目录服务;
工具类,包括封装JNDI的LdapOperUtils.java操作工具、封装LDAP Filter的写法的LDAP Filter格式类SQL字符串转换工具和自动加载配置文件的类继承BaseLdapDao。
一种JAVA语言对LDAP的访问操作的方法,应用于需要通过LDAP协议使用具体目录服务的业务,包括:
步骤1,客户端封装JNDI,设置LdapCons.properties属性的配置文件;
步骤2,客户端导入工具类,将jar文件和依赖jar文件引入JAVA工程中;
步骤3,客户端根据配置文件配置参数,包括LDAP连接参数或LDAP双机配置参数,并将所述配置文件放入JAVA工程类路径;
步骤4,LDAP服务器通过LDAP的类继承BaseLdapDao自动加载所述配置文件,初始化LDAP的访问环境及LDAP连接池;
步骤5,客户端从连接池获取连接,从而获取与此连接对应的LDAP的类继承配置文件中的连接对象,对LDAP进行访问和操作;
步骤6,客户端使用已封装的JNDI提供的API,对LDAP进行相应的操作;
步骤7,对LDAP进行访问和操作结束,归还连接对象。
进一步的,所述步骤1为通过LdapOperUtils.java操作工具,封装JNDI实现LDAP访问通用工具的连接、关闭以及操作。
进一步的,所述步骤2包括以下子步骤:
步骤2.1:将jar文件和依赖jar文件复制到JAVA工程的Lib目录中;
步骤2.2:将jar文件和依赖jar文件设置到JAVA工程类路径classpath中。
进一步的,所述步骤5为调用“this.getContext()”,从BaseLdapDao中获取连接对象。
进一步的,所述步骤7为调用“this.closeContext()”,归还连接对象。
进一步的,所述LDAP双机配置参数包括主LDAP服务器参数和从LDAP服务器参数。
进一步的,所述步骤1还包括,通过LDAP Filter格式类SQL字符串转换工具,针对LDAP Filter的写法进行封装。
本发明的有益效果是:弥补了原来传统方式的不足,简化JAVA语言访问和操作LDAP配置、提高JAVA程序访问和操作LDAP的效率、提高JAVA程序访问和操作LDAP服务的可靠性、提供工具类封装,简化操作提高开发效率。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,一种JAVA语言对LDAP的访问操作的系统,它包括LDAP客户端、工具类和LDAP服务器,
客户端,封装JNDI,设置配置文件及参数,客户端通过连接池连接LDAP服务器;
LDAP服务器,提供轻量目录服务;
工具类,包括封装JNDI的LdapOperUtils.java操作工具、封装LDAP Filter的写法的LDAP Filter格式类SQL字符串转换工具和自动加载配置文件的类继承BaseLdapDao。
一种JAVA语言对LDAP的访问操作的方法,应用于需要通过LDAP协议使用具体目录服务的业务,包括:
步骤1,客户端封装JNDI,设置LdapCons.properties属性的配置文件;
步骤2,客户端导入工具类,将jar文件和依赖jar文件引入JAVA工程中;
步骤3,客户端根据配置文件配置参数,包括LDAP连接参数或LDAP双机配置参数,并将所述配置文件放入JAVA工程类路径;
配置文件参数程序如下:
#Ldap Connection Config
#
ldap.baseDn=dc=sitech,dc=com
#################################################
#############Master Ldap Server Config###########
#################################################
ldap.master.url=ldap://172.16.9.23:8000/
ldap.master.adminUID=cn=Directory manager
ldap.master.adminPWD=NGFzaXRlY2g=
ldap.master.sslTrustStore=
ldap.master.sslTrustStorePassword=
ldap.master.securityProtocol=
ldap.master.ldapTimeOut = 3000
ldap.master.ldapIsPool = true
#ldap.master.poolUse:is using pool
ldap.master.poolUse = true
ldap.master.poolTimeOut = 3000
ldap.master.poolActiveNum = 100
#################################################
#############BackUp Ldap Server Config###########
#################################################
ldap.backup.url=ldap://localhost:8000/
ldap.backup.adminUID=cn=Directory manager
ldap.backup.adminPWD=NGFzaXRlY2g=
ldap.backup.sslTrustStore=
ldap.backup.sslTrustStorePassword=
ldap.backup.securityProtocol=
ldap.backup.ldapTimeOut = 3000
ldap.backup.ldapIsPool = true
ldap.backup.poolUse = true
ldap.backup.poolTimeOut = 3000
ldap.backup.poolActiveNum =400
步骤4,LDAP服务器通过LDAP的类继承BaseLdapDao自动加载所述配置文件,初始化LDAP的访问环境及LDAP连接池;
步骤5,客户端从连接池获取连接,从而获取与此连接对应的LDAP的类继承配置文件中的连接对象,对LDAP进行访问和操作;
步骤6,客户端使用已封装的JNDI提供的API(包括LDAP的各种操作:增加、删除、条件查询、修改、验证等API),对LDAP进行相应的操作;
步骤7,对LDAP进行访问和操作结束,归还连接对象。
所述步骤1为通过LdapOperUtils.java操作工具,封装JNDI实现LDAP访问通用工具的连接、关闭以及操作。
所述步骤2包括以下子步骤:
步骤2.1:将jar文件和依赖jar文件复制到JAVA工程的Lib目录中;
步骤2.2:将jar文件和依赖jar文件设置到JAVA工程类路径classpath中。
所述步骤5为调用“this.getContext()”,从BaseLdapDao中获取连接对象。
所述步骤7为调用“this.closeContext()”,归还连接对象。
所述LDAP双机配置参数包括主LDAP服务器参数和从LDAP服务器参数。
本发明通过配置文件进行LDAP服务的双机配置,在配置文件中可以配置主LDAP服务器参数和从LDAP服务器参数,程序默认使用主LDAP服务器配置参数进行访问和操作,当主LDAP服务器连接发生异常时,自动切换至从LDAP服务器,当主LDAP服务器恢复正常时自动完成切换。
所述步骤1还包括,通过LDAP Filter格式类SQL字符串转换工具,针对LDAP Filter的写法进行封装。写Filter时可以使用类SQL方式编写,例如“F1=1 AND F2=2 OR (f3=3 OR f4=4) AND NOT f5=5”,通过SQL字符串转换工具自动转换为LDAP Filter字符串,简化了LDAP Filter的使用,提高开发效率。
LDAP通用操作jar文件以及依赖jar文件列表(说明:依赖的jar文件需要使用列表所列出的版本以及之上版本):commons-collections-3.1.jar、commons-lang-2.4.jar、commons-pool-1.2.jar、log4j-1.2.13.jar、commons-logging-1.0.jar。
访问LDAP程序如下:
//--------------------DAO和实现例子代码-------------------
/**
* YourDaoLdapImpl
*
* <p>Title: YourDaoLdapImpl</p>
* <p>Description: YourDaoLdapImpl</p>
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: SI-TECH </p>
* author yourName
* version 1.0
* createtime time
*
*/
public class YourDaoLdapImpl extends BaseLdapDao implements
YourDaoInterface {
// yourMethod
public boolean yourMethod(object param) throws YourException {
// ---------获取连接操作处理开始------------
ConnectionObject connectionObject = this.getContext();
DirContext context = (DirContext) connectionObject.getConnection();
// ---------获取LDAP连接操作处理结束------------
try {
// do something here
// 此处使用封装的JNDI提供的API进行业务逻辑编写
// 例如:
// LdapOperUtils.searchContextOne(context,
// dn, filter);
// LdapOperUtils.deleteStationSubtreeScope
// (context, dn, null);
//
//
} catch (LDAPException e) {
} finally {
// finally close
// 使用过后务必调用关闭方法
this.closeContext(connectionObject);
}
}
// other methods... ...
}
//--------------------------------------------
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。