java.net.ConnectException: время ожидания соединения истекло при подключении к ldap

Я пытаюсь подключиться к активному каталогу ldap на Windows Server 2008, используя spring ldap 1.3.1.RELEASE, а конфигурация ldap выглядит следующим образом:

  • URL-адрес ldap: ldap: //dc.fabrikam.com
  • имя пользователя: администратор
  • пароль: 123456

- конфигурация spring ldap выглядит следующим образом:

    <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. Хост: dc.fabrikam.com
  2. Порт: 389
  3. Базовое DN: dc = fabrikam, dc = com
  4. DN пользователя: CN = администратор, CN = пользователи, DC = fabrikam, DC = com
  5. Пароль: секретный

но я все еще получаю тайм-аут с подключением spring ldap.

ОБНОВЛЕНИЕ 2:

проблема теперь сужена до spring ldap, потому что я пробовал вышеуказанную конфигурацию с JNDI, и подключение к ldap работает нормально, как указано здесь:

поиск ldap очень медленный

Я думаю, что проблема может быть в реферальном свойстве.


person Mahmoud Saleh    schedule 31.12.2012    source источник
comment
Вы пытались удалить :389 в конце URL-адреса во втором примере? В вашем первом примере не было предоставлено полное DN администратора, поэтому попытка аутентификации была отклонена. Во втором примере не удается подключиться к серверу LDAP.   -  person ig0774    schedule 31.12.2012
comment
@ ig0774, можешь посмотреть последнее обновление? также возможно ли, что я могу подключиться к URL-адресу ldap из браузера?   -  person Mahmoud Saleh    schedule 31.12.2012
comment
Подключиться к URL-адресу LDAP из веб-браузера? Я не знаю, чтобы поддержать это. Однако вы можете использовать браузер LDAP, например Apache Directory Studio или JXPlorer, чтобы попробовать URL-адрес LDAP.   -  person ig0774    schedule 31.12.2012
comment
Что касается обновления, я заметил, что это то, к чему он пытается подключиться: fabrikam.com.com:389. Это больше похоже на проблему копирования и вставки в приведенном примере. Как я предлагал ранее, не могли бы вы попробовать изменить свойство url на ldap://dc.fabrikam.com (или его не обфусцированный эквивалент)?   -  person ig0774    schedule 31.12.2012
comment
@ ig0774, я удалил суффикс порта и все еще получаю ту же ошибку, я снова обновил вопрос.   -  person Mahmoud Saleh    schedule 31.12.2012
comment
Вы уверены, что dc.fabrikam.com правильный адрес DC? Сначала я подтверждаю, что dc.fabrikam.com можно разрешить с помощью DNS. В командной строке Windows это можно сделать с помощью команды nslookup dc.fabrikam.com. На * nix dig dc.fabrikam.com.   -  person ig0774    schedule 31.12.2012
comment
Кроме того, попробуйте загрузить один из предложенных мною LDAP-браузеров и подключиться с их помощью.   -  person ig0774    schedule 31.12.2012
comment
nslookup дает следующие результаты: Сервер: Неизвестный адрес: 192.168.1.1 Неавторизованный ответ: Имя: dc.fabrikam.com Адрес: 92.242.144.5   -  person Mahmoud Saleh    schedule 31.12.2012
comment
позвольте нам продолжить обсуждение в чате   -  person ig0774    schedule 31.12.2012
comment
@ ig0774, посмотрите мое последнее обновление, мне удалось установить соединение с jxplorer.   -  person Mahmoud Saleh    schedule 01.01.2013
comment
@MahmoudSaleh, тебе удалось это решить?   -  person    schedule 27.09.2019


Ответы (4)


Мы обнаружили, что эта проблема возникла из-за несуществующего контроллера домена в DNS. Если вы используете доменное имя вместо IP, выполните NSLOOKUP, чтобы показать все IP-адреса, на которые указывает домен:

NSLOOKUP fabrikam.com

Убедитесь, что все IP-адреса из NSLOOKUP доступны на порту 389:

Test-NetConnection 172.30.2.1 -port 389
person KERR    schedule 09.10.2017
comment
Отличный ответ, я нашел точный IP-адрес после NSLOOKUP, после чего соединение было установлено правильно. - person nandeesh; 02.03.2020

При подключении к удаленному ресурсу может произойти тысяча вещей. Чтобы сузить причину, выполните следующие действия:

  • Проверьте журналы Windows (с помощью средства просмотра событий)
  • Отключите брандмауэр Windows на dc.fabrikam.com, если он включен (затем убедитесь, что порт 389 открыт)
  • Попробуйте подключиться к LDAP с хоста, на котором вы запускаете приложение Java, вручную, например telnet dc.fabrikam.com 389
  • Если это вообще возможно, разверните приложение Java на том же хосте dc.fabrikam.com, чтобы исключить проблемы с подключением.
person Marcel Stör    schedule 31.12.2012
comment
когда я использую команду telnet dc.fabrikam.com 389, в cmd нет ответа - person Mahmoud Saleh; 01.01.2013
comment
@Marcel, как мне проверить, открыт ли порт на сервере или нет? - person coderzzz18; 10.01.2020

Чтобы решить эту проблему, вам необходимо добавить на свой компьютер конфигурацию LDAP DNS, чтобы разрешить пружинное подключение к серверу LDAP.

  • Linux: / etc / hosts

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

Откройте cmd, чтобы просмотреть адрес LDAP с помощью команды NSLOOKUP, а затем добавьте адрес сервера ldap в файл хостов Windows как <server IP> <server host name>:

Пример:

192.168.1.123 ldap.atlassian.com

person becher henchiri    schedule 15.01.2019

Проблема, с которой вы столкнулись, - это соединение, которое вам просто нужно сгруппировать, эти aumetnar просачиваются в базу, например, ваша конфигурация:

<property name="base" value="dc=fabrikam,dc=com" />

изменить на:

<property name="base" value="ou=grupo,dc=fabrikam,dc=com" />
person mabo    schedule 25.11.2013
comment
Непонятно. «Сгруппировать эти ауметнары, просачивающиеся в основание» бессмысленно и содержит несуществующее слово. - person user207421; 10.10.2017