当前位置: 首页 > 知识库问答 >
问题:

JAVA网ConnectException:连接到ldap时连接超时

寇甫
2023-03-14

我正在尝试使用spring ldap 1.3.1连接到windows server 2008上的ldap active directory。发布和ldap配置如下所示:

  • ldap url是:ldap://dc.fabrikam.com
  • 用户名:管理员
  • 密码:123456

-Springldap配置如下:

    <bean id="contextSource" 
    class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" value="ldap://dc.fabrikam.com" />
    <property name="base" value="dc=fabrikam,dc=com" />     
    <property name="userDn" value="CN=administrator,CN=Users,DC=fabrikam,DC=com" />     
    <property name="password" value="123456" />


    <property name="baseEnvironmentProperties">
    <map>
        <entry key="java.naming.referral">
            <value>follow</value>
        </entry>
    </map>
    </property>

</bean>

<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
    <constructor-arg ref="contextSource" />
</bean>

>

  • LDAPContactDAO:

    @Service
    public class LDAPContactDAO implements ContactDAO {
    
    @Autowired
    private LdapTemplate ldapTemplate;
    
    public List getAllContactNames() {
        return ldapTemplate.search("", "(objectclass=person)",
                new AttributesMapper() {
                    public Object mapFromAttributes(Attributes attrs)
                            throws NamingException {
                        return attrs.get("cn").get();
                    }
                });
    }
    
    }
    

    -在异常之前调试:

    2012-12-31/15:50:36.425 [localhost-startStop-1] DEBUG AuthenticationSource not set - using default implementation
    2012-12-31/15:50:36.428 [localhost-startStop-1] DEBUG Not using LDAP pooling
    2012-12-31/15:50:36.428 [localhost-startStop-1] DEBUG Trying provider Urls: ldap://192.168.1.118/dc=fabrikam,dc=com
    2012-12-31/15:50:37.558 [http-bio-8080-exec-5] DEBUG Got Ldap context on server 'ldap://192.168.1.118/dc=fabrikam,dc=com'
    

    尝试使用getAllContactNames方法时,出现以下异常

    org.springframework.ldap.CommunicationException: fabrikam.com.com:389; nested exception is javax.naming.CommunicationException: fabrikam.com.com:389 [Root exception is java.net.ConnectException: Connection timed out: connect]
    org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:100)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:319)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:259)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:571)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:556)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:411)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:431)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:451)
    com.xeno.advancedphonedirectory.LDAPContactDAO.getAllContactNames(LDAPContactDAO.java:20)
    com.xeno.advancedphonedirectory.web.IndexController.get(IndexController.java:20)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    
    java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)
        at com.sun.jndi.ldap.Connection.createSocket(Connection.java:352)
        at com.sun.jndi.ldap.Connection.<init>(Connection.java:187)
        at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:118)
        at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1580)
        at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2652)
        at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:293)
        at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
        at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:134)
        at com.sun.jndi.url.ldap.ldapURLContextFactory.getObjectInstance(ldapURLContextFactory.java:35)
        at javax.naming.spi.NamingManager.getURLObject(NamingManager.java:584)
        at javax.naming.spi.NamingManager.processURL(NamingManager.java:364)
        at javax.naming.spi.NamingManager.processURLAddrs(NamingManager.java:344)
        at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:316)
        at com.sun.jndi.ldap.LdapReferralContext.<init>(LdapReferralContext.java:93)
        at com.sun.jndi.ldap.LdapReferralException.getReferralContext(LdapReferralException.java:132)
        at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1838)
        at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1749)
        at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
        at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
        at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
        at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:248)
        at org.springframework.ldap.core.LdapTemplate$4.executeSearch(LdapTemplate.java:253)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:293)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:259)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:571)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:556)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:411)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:431)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:451)
        at com.xeno.advancedphonedirectory.LDAPContactDAO.getAllContactNames(LDAPContactDAO.java:20)
        at com.xeno.advancedphonedirectory.web.IndexController.get(IndexController.java:20)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
    

    请指教。

    更新:

    我设法连接到活动目录与jxplorer使用以下配置:

    1. 主持人:华盛顿。法布里卡姆。com

    但我仍然得到超时与Springldap连接。

    更新2:

    问题现在被缩小到spring ldap,因为我用JNDI尝试了上述配置,与ldap的连接工作正常,如本文所述:

    LDAP搜索很慢

    我认为转介财产可能是个问题。

  • 共有3个答案

    丌官嘉福
    2023-03-14

    要解决此问题,需要向计算机添加LDAP DNS配置,以允许spring连接到LDAP服务器。

    >

    Windows:C:\Windows\System32\drivers\etc\hosts

    打开cmd,使用NSLOOKUP命令查看LDAP地址,然后将LDAP服务器地址添加到windows主机文件中,如

    例子:

    192.168.1.123 ldap。大西洋的。通用域名格式

    訾安邦
    2023-03-14

    当连接到远程资源时,可能会出现一千种错误。缩小范围的原因如下:

    • 检查Windows日志(使用事件查看器)
    • 禁用Windows防火墙dc.fabrikam.com应该启用(然后确保端口389是开放的)
    • 尝试从您手动运行Java应用程序的主机连接到LDAP,如telnetdc.fabrikam.com389
    • 如果在所有可能的部署您的Java应用程序在同一主机上dc.fabrikam.com排除连接问题
    欧浩淼
    2023-03-14

    我们发现这个问题是由于DNS中不存在域控制器造成的。如果使用的是域名而不是IP,请执行NSLOOKUP以显示域指向的所有IP:

    NSLOOKUP fabrikam.com
    

    确保在端口389上可以访问NSLOOKUP的所有IP:

    Test-NetConnection 172.30.2.1 -port 389
    
     类似资料:
    • 我看到了很多“java.net.ConnectException:Connection Relection”问题,但没有一个问题提到此错误的超时。我的问题是,我必须连接到一个服务器,在某些情况下,是阻塞的(由另一个软件连接到同一个端口)。所以,我正在做一个循环,用一些最大的重试来尝试连接: 我当前的代码(当然,依赖于我的软件的许多配置,但运行良好): null Linux: 2019-12-05

    • 我目前正试图找到一个替代我的android应用程序后端。目前,我使用php servlets查询Mysql数据库。数据库(Mysql)托管在我学院的一台计算机上,所以我不能更改任何配置,因为我不是管理员。我只能编辑自己的表。 我试图使用以下代码创建一个java RESTful服务器:

    • 我将kafka-connect docker映像()部署到ECS/fargate,为我的ECS服务分配了一个安全组,该安全组允许传入的zooper keeper和kafka bootstrap服务器通信量(纯文本和TLS),并分配了一个IAM角色,该角色允许我的ECS任务对MSK集群运行kafka操作,但connect集群在尝试从MSK集群获取代理列表时仍会超时。 在AWS中,kafka conn

    • 我试图通过Jedis客户端连接到redis服务器,但在连接时我得到了以下异常和堆栈跟踪- redisconnectionFailureException:无法获得Jedis连接;嵌套异常是redis.clients.jedis.exceptions.jedisconnectionException:无法从位于org.springframework.data.redis.connection.jed

    • 行动时刻 - 将FreeRADIUS连接到LDAP 以下部分将向您展示如何将FreeRADIUS连接到LDAP。 安装slapd 确保在Linux服务器上安装了slapd。下表可用作在本书中讨论的三个发行版中的每一个上安装slapd的指南: 发行版 用于安装MySQL服务器的命令 CentOS yum install openldap-servers openldap-clients SUSE z

    • 我试图连接到一个需要基本身份验证的网站,但我得到了一个java。网ConnectException:拒绝连接:连接,我无法获取内容,基本身份验证依赖于Base64编码的“Authorization”标头,其值由单词“Basic”后跟空格,后跟Base64编码的名称:password组成。当然,使用浏览器我可以得到我想要的正确的json文件 我在另一个程序中得到了相同的结果: 这里是printSta