Проблемы с программным подключением к AD - PullRequest
1 голос
/ 27 мая 2011

Я занимаюсь разработкой приложения на Java EE 6, в котором для входа в систему используется AD. Мой аутентификатор прост и выглядит так:

@Singleton
@TransactionManagement(TransactionManagementType.BEAN)
public class ADAuthenticator{
    private static final String ldapHost = "ldap://domainname.mycompany.com:389";
    private static final String domain = "domainname";

    public ADAuthenticator() {
    }

    public void authenticate(String user, String pass) throws NamingException{
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, ldapHost);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, user + "@" + domain);
        env.put(Context.SECURITY_CREDENTIALS, pass);
        LdapContext ctxGC = new InitialLdapContext(env, null);
    }
}

В течение некоторого времени это работало хорошо, но в последнее время яполучаю следующее исключение (за исключением случаев, когда это волшебным образом работает):

javax.naming.CommunicationException: mydomain.mycompany.com:389 [Root exception is java.net.ConnectException: Connection timed out: connect]
at com.sun.jndi.ldap.Connection.<init>(Connection.java:210)
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.getUsingURLs(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:134)
at com.xdin.competence.util.ADAuthenticator.authenticate(ADAuthenticator.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at <ejb stuff omitted> 

Caused by: 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)
... 101 more

Ничего не изменилось с кодом, и согласно поддержке IT, никакая конфигурация относительно AD также не изменилась.

Я отделил соответствующий код в простом консольном приложении, и он отлично работает с точно такими же настройками.Таким образом, проблема, похоже, связана с Java EE или веб-сервером.Есть идеи?

1 Ответ

2 голосов
/ 27 мая 2011

Пакеты для соединения TCP / IP не приходят вовремя. Это может иметь несколько причин, но из того, что вы описываете, это может быть просто перегрузка сети между вашим Java-кодом и сервером LDAP, которая, в свою очередь, вызывает потерю пакета. Также может быть межсетевой экран, блокирующий этот порт между ними.

Вам необходимо узнать об инструментах ping, traceroute и telnet host port для устранения неполадок на сетевом уровне. Я бы посоветовал вам объединиться с сетевым парнем из ИТ-службы поддержки и попросить его помочь выяснить, где потеря вашего пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...