javax.naming.ServiceUnavailableException : socket closed

标签 java spring ldap

我尝试通过 LDAP 授权用户。

public Authentication authenticate(Authentication auth) throws AuthenticationException {
        String username = getUserNameFromAuth(auth);
        String password = auth.getCredentials().toString();
        HelpDescUser userDetails = (HelpDescUser) userDetailsService.loadUserByUsername(username);
        String email = userDetails.getEmail();
        String url = "ldap://" + ldapHost + ":" + port + "/";
        ActiveDirectoryLdapAuthenticationProvider ldapProvider =
                    new ActiveDirectoryLdapAuthenticationProvider(null, url, rootDn);
        ldapProvider.setSearchFilter(filter);
        Authentication authenticate = ldapProvider.authenticate(new UsernamePasswordAuthenticationToken(email, password));
        if (authenticate.isAuthenticated()) {
            return new UsernamePasswordAuthenticationToken(userDetails, password, userDetails.getAuthorities());
        }
}

我收到这个:

Caused by: javax.naming.ServiceUnavailableException: okmarket.ru:636; socket closed at java.naming/com.sun.jndi.ldap.Connection.readReply(Connection.java:426) at java.naming/com.sun.jndi.ldap.LdapClient.ldapBind(LdapClient.java:365) at java.naming/com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:214) at java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2795) at java.naming/com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:320) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153) at java.naming/com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83) at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:730) at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) at java.naming/javax.naming.InitialContext.init(InitialContext.java:236) at java.naming/javax.naming.ldap.InitialLdapContext.(InitialLdapContext.java:154)

怎么了?问题出在我这边,还是 LDAP 那边?

最佳答案

别担心,我只是尝试连接 ldap:// 和端口 636。 正确的方法是发出 ldaps:// 请求或设置端口 389

关于javax.naming.ServiceUnavailableException : socket closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57569714/

相关文章:

spring - 如何在 Spring Controller 中访问 web.xml 的 <context-param> 值

.net - 如何使用带有用户名而不是 CN 的 LDAP 查询 ActiveDirectory?

ldap - RabbitMQ LDAP 身份验证失败

java - Mulesoft Dataweave,LDAP 到 SOAP 大消息按一定大小截断。尺寸限制?

java - java中出现 ""时如何返回null?

java - Twitter Composer 回调 OnSuccess/OnFailure Fabric

java - Spring MVC中重定向和 View 渲染的区别

java - Spring ldap 身份验证失败错误代码

java - 有没有办法存储 POM 文件中的启动配置,以便将它们导入到 Eclipse 和 Idea 中?

java - 通过 udp 发送的图像已损坏