- 论坛徽章:
- 0
|
使用openldap进行认证,在创建连接的时候非常慢,大概要4.5秒左右
时间都花在这里: DirContext ctx = new InitialDirContext(mEnv);
不知是我代码的问题,还是还需要在opanldap上进行一些配置,望高手指教。
获取连接的代码如下:
/**
* 获取 LDAP 服务器连接的方法
* @param env 连接LDAP的连接信息
* @return DirContext - LDAP server的连接
*/
public static DirContext getDirContext(Env env) {
try {
// 初始化Properties对象
Properties mEnv = new Properties();
// 使用LDAP/AD的认证方式
mEnv.put(Context.AUTHORITATIVE, "true");
// 设定LDAP/AD的连接工厂
mEnv.put(Context.INITIAL_CONTEXT_FACTORY, env.factory);
// 设定LDAP/AD的url地址
mEnv.put(Context.PROVIDER_URL, env.url);
// 设定连接TimeOut
if (!StringUtils.isEmpty(env.timeOut)) {
mEnv.put("com.sun.jndi.ldap.connect.timeout", env.timeOut);
}
// 设定安全模式为simple方式
mEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
// ssl通道访问
if (env != null && "ssl".equals(env.securityProtocol)) {
// 设定访问协议为ssl
mEnv.put(Context.SECURITY_PROTOCOL, env.securityProtocol);
// 设置访问证书属性,若没有此证书将无法通过ssl访问AD
System.setProperty("javax.net.ssl.trustStore",
env.sslTrustStore);
}
// 读取可以登陆ldap的帐号、密码
mEnv.put(Context.SECURITY_PRINCIPAL, env.adminUID);
mEnv.put(Context.SECURITY_CREDENTIALS, env.adminPWD);
log.debug(Constants_INIT + "DirContext");
// 通过参数连接LDAP/AD
Date beginTime = new Date();
System.out.println("开始1111:" + beginTime.getTime());
DirContext ctx = new InitialDirContext(mEnv);
Date endTime = new Date();
System.out.println("结束2222:" + endTime.getTime());
long t = endTime.getTime() - beginTime.getTime();
System.out.println("用时:" + t);
log.debug("LdapConnectionFactory:" + Constants_INIT + "DirContext" +
Constants_SUCCESS);
return ctx;
}
catch (NamingException ex) {
ex.printStackTrace();
log.error("LdapConnectionFactory:" + Constants_INIT + "DirContext" +
Constants_FAIL);
log.error(ex.getMessage());
return null;
}
} |
|