使用ldapsdk.jar连接到Ldap服务器ipnalet过程如下:
1. 获取连接池.
Ldapsdk 提供了连接池类ConnectionPool,可以通过构造函数来构造连接池.显然,这个动作应该被封装到一个singleton中.
ConnectionPool = new ConnectionPool(MIN_CONN_SIZE, MAX_CONN_SIZE, HOST, PORT)
参数的意思很显然,第一个定义了连接池的最小连接数,第二个参数定义了连接池的最大连接数,第三个参数指定将要连接到的Ldap主机地址,第四个参数是端口.
2. 获取连接和关闭连接.
可以通过ConnectionPool提供的getConnection()方法获取连接,但是最后要调用close(LDAPConnection)方法来将该连接返回给连接池,否则有连接泄露的危险.
3. 连接并验证
连接ldap服务器需要一个帐号。这个帐号是通过Connection.authenticate(String dn, String password) 来指定的。也就是,我们必须用这样的代码来验证并连接:
String dn = “uid=Frederick, ou=users, o=frederick.iteye.com”;
String password = “password”;
Connection.authenticate(dn, password);
4. 现在,我们就可以使用这个通过了验证的Connection 对象来做相关操作了。假设用来做操作的帐号是ldap_connection, 密码是password, 完整的代码如下:
import netscape.ldap.LDAPConnection;
import netscape.ldap.LDAPException;
import netscape.ldap.util.ConnectionPool;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import fred.envoy.exception.util.LdapUtilsException;
public class LdapUtils {
private static final Log log = LogFactory.getLog(LdapUtils.class);
private static final String HOST = "frederick.iteye.com";
private static final int PORT = 10389;
private static final int MIN_CONN_SIZE = 1;
private static final int MAX_CONN_SIZE = 5;
private static final String USER_ID = "ldap_connection";
private static final String PASSWORD = "password";
private static final ConnectionPool connPool;
static {
try {
connPool = new ConnectionPool(MIN_CONN_SIZE, MAX_CONN_SIZE, HOST, PORT);
} catch (LDAPException e) {
String message = "Failed to init Ldap connection pool";
if (log.isErrorEnabled()) {
log.error(message, e);
}
throw new LdapUtilsException(message, e);
}
}
public static ConnectionPool getConnectionPool() {
return LdapUtils.connPool;
}
public static LDAPConnection getConnection() {
LDAPConnection conn = LdapUtils.getConnectionPool().getConnection();
try {
conn.authenticate(LdapUtils.getDnForUser(USER_ID), PASSWORD);
} catch (LDAPException e) {
String message = "Failed to authen the system ldap user";
if (log.isErrorEnabled()) {
log.error(message, e);
}
throw new LdapUtilsException(message, e);
}
return conn;
}
public static void closeConnection(LDAPConnection conn) {
LdapUtils.getConnectionPool().close(conn);
}
public static String getDnForUser(String userId) {
return new StringBuffer()
.append("uid=").append(userId).append(",")
.append("ou=users,o=frederick.iteye.com")
.toString();
}
}
5. 当然,也可以不用连接池,而是直接指定单个的连接。
LDAPConnection conn = new LDAPConnection();
try {
conn.connect(HOST, PORT);
} catch (LDAPException e1) {
throw new RuntimeException(e);
}
使用这样的单个连接有个好处,就是可以一次指定多个服务器,这样在连接的时候,会尝试一个一个的去试,直到成功连接到一个服务器。
LDAPConnection conn = new LDAPConnection();
try {
conn.connect("host1:port1 host2:port2 hostn:portn", LDAPv3.DEFAULT_PORT);
} catch (LDAPException e1) {
throw new RuntimeException(e);
}
其中,各个服务器必须符合“服务器名:端口名”的格式,而服务器之间用空格隔开。每个服务器可以指定自己的端口,而最后必须有一个默认端口参数。当某个服务器只指定了服务器名而没有指定端口的时候,连接会尝试使用指定的默认端口去连接
分享到:
相关推荐
【Go-ldap-test-tool:一个轻量级的LDAP测试工具】 在信息技术领域,LDAP(Lightweight Directory Access Protocol)是一种用于访问和管理分布式目录服务的标准协议。它被广泛应用于组织内部的身份验证、用户权限...
这个`python_ldap-3.4.4-cp38-cp38-win_amd64.whl`文件是一个预编译的Python轮子(Wheel)包,特别为Python 3.8(cp38)和64位Windows(win_amd64)平台设计。"whl"是一种二进制分发格式,它简化了Python库的安装...
这个`python_ldap-3.4.4-cp312-cp312-win_amd64.whl`文件是专门为Python 3.12版本编译的Windows 64位平台的Python LDAP库的轮子文件(wheel file)。轮子文件是预编译的Python软件包,旨在简化安装过程,避免了通常...
在调试工程的时候发现需要django-auth-ldap,但还依赖python_ldap包,在windows上装这些包费老鼻子劲,csdn上找呢又不全,收分还多贵的,因此找到了之后将python3.7-11的包都给大家提供,不好意思挣点分,因为有些...
python_ldap-3.3.1-cp37-cp37m-win_amd64
python_ldap-3.4.0-cp310-cp310-win_amd64.whl
这个`python_ldap-3.1.0-cp36-wheel.zip`压缩包包含了适用于Python 3.6版本的Python LDAP库的二进制安装包。"cp36"代表的是Python 3.6的版本标识,而"win32"和"x64"分别表示这些文件是为32位和64位的Windows系统编译...
总结起来,`python_ldap-3.4.4-cp37-cp37m-win32.whl`是一个适用于Python 3.7 32位Windows系统的预编译Python LDAP库,它提供了方便的接口来操作LDAP服务器,包括连接、身份验证、搜索和修改目录服务。要使用它,只...
spring-ldap-core-1.3.0.RELEASE.jar
这个“python_ldap-3.4.4-cp39-cp39-win32.whl.zip”文件是Python LDAP库的特定版本,适用于Python 3.9解释器,并且是为32位Windows系统编译的。在Python生态系统中,`whl`(Wheel)文件是一种预编译的Python软件包...
python_ldap-3.3.1-cp36-cp36m-win_amd64.whl
Java 连接ldap需要驱动包,否则JDBC无法访问数据库(无法注册驱动),常用的是ldap-connector
python_ldap-3.3.1-cp38-cp38-win_amd64
3. **安全性增强**:作为处理敏感用户信息的工具,ldap-account-manager-3.7可能会包含加强的安全措施,比如HTTPS连接,更强的密码策略,以及访问控制等,以保护数据安全。 4. **性能优化**:版本升级通常会带来...
python_ldap-3.4.0-cp38-cp38-win_amd64.whl
这个特定的压缩包文件 "python_ldap-3.4.4-cp37-cp37m-win_amd64.whl" 是Python的一个二进制分发包,专门针对Python 3.7(cp37)版本,并且适用于64位的Windows系统(amd64)。.whl文件是一种方便的安装包格式,它...
python_ldap-3.4.0-cp311-cp311-win_amd64.whl
python_ldap-3.3.1-cp39-cp39-win32
ldap页面化管理工具,ldap-account-manager-5.0.tar.gz