我有一个网页来管理活动目录组,并且在此页面的初始化过程中,我使用jndi连接到ldap并将ldap上下文保存在http会话中。获取连接重置在会话中存储/检索InitialLdapContext时出现异常
下面是如何连接到LDAP:
public static LdapContext connectToLdap(String host,
String userDN, String userPassword,
boolean ssl) throws Exception {
System.out.println("connectToLdap");
String hostPrefix = "ldap";
String ldapPort = "389";
if (ssl) {
hostPrefix = "ldaps";
ldapPort = "636";
}
String providerUrl = hostPrefix + "://" + host + ":" + ldapPort;
//System.out.println("####### LDAP URL: " + providerUrl);
LdapContext ldapContext;
Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, providerUrl);
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, userDN);
ldapEnv.put(Context.SECURITY_CREDENTIALS, userPassword);
ldapEnv.put("com.sun.jndi.ldap.read.timeout", 1000 * 10 + "");
if (ssl) {
ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
}
ldapEnv.put(Context.REFERRAL, "ignore");
try {
ldapContext = new InitialLdapContext(ldapEnv, null);
System.out.println("success connection to ldap");
return ldapContext;
} catch (Exception e) {
System.out.println("failure connection to ldap");
e.printStackTrace();
return null;
}
}
- 我不关闭的背景下,因为它将用户会话中被重新使用。
- 我在会话中放置了ldapcontext,这样我就不必频繁地调整每个用户的ldap,每个用户每个会话只有一个连接。
问题:我注意到,有时10-15分钟后Active Directory组的检索失败,我得到异常:
javax.naming.CommunicationException: Connection reset [Root exception is java.net.SocketException: Connection reset]
任何想法,为什么?请告诉我为什么我得到这个问题以及如何解决它。
检查LDAP服务器日志。将有一些问题,因为服务器正在重置连接。 – Santosh