javax.naming.CommunicationException LDAP SSL InitialLdapCont



我通过SSL使用LDAP时遇到了一个奇怪的问题。要进入应用程序,我们有一个登录窗口,用户可以在其中输入密码和用户名。如果他选对了,一切都会好起来的。但如果他进错了门,就会出现奇怪的问题。我有一个关于错误密码的错误,这仍然可以。但如果他再次尝试输入,这次是一个正确的密码/用户名(没有关闭应用程序(,我有以下异常:

javax.naming.CommunicationException: simple bind failed: X.X.X:636 [Root exception is javax.net.ssl.SSLException: java.lang.IllegalStateException: stream has already been operated upon or closed] 

用户最后需要重新启动应用程序,输入正确的用户名/密码才能登录。有一个代码块:

Hashtable<String, String> t = new Hashtable<>();
.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
t.put(Context.PROVIDER_URL, "ldap://x.x.x:636"); // SSL Server
t.put(Context.SECURITY_PROTOCOL, "ssl");
t.put(Context.SECURITY_AUTHENTICATION, "simple");
t.put(Context.SECURITY_PRINCIPAL, userDn);
t.put(Context.SECURITY_CREDENTIALS, password);
return new InitialLdapContext(t, null);

正如我在文章中提到的,最后一行导致异常。

我已经解决了。在连接到LDAP失败后,有必要重新导入证书。

最新更新