【发布时间】:2020-04-16 07:33:38
【问题描述】:
我在通过 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);
正如我在帖子中提到的,最后一行导致异常。
【问题讨论】: