2013-06-25 5 views
0

Я работаю над реализацией UnboundID в памяти сервера LDAP для одного из наших приложений, но с самого начала идти я столкнулся с проблемой:Подключение к серверу LDAP с помощью UnboundID, конструктор, не соответствующий пример документации

мне нужно делать соединение с нашего производственного сервера один раз для того, чтобы получить схему с помощью:

Schema newSchema = Schema.getSchema(connection); 
    config.setSchema(newSchema); 

в документации сказано, что для установления соединения с сервером LDAP с помощью SSL мне нужно использовать SSUtil как:

SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager()); 

LDAPConnection connection = 
    new LDAPConnection(sslUtil.createSSLSocketFactory()); 
connection.connect("server.example.com", 636); 

Я устал выше, и компилятор жаловался

The constructor LDAPConnection(SSLSocketFactory) is undefined 

и при поиске в LDAPConnection там действительно нет такого конструктора. Я использую банку unboundid-ldapsdk-se.jar, кто-нибудь знает, как обойти это?

+0

Похоже, что они оставили комментарий '.createSocket()' некоторого описания после 'createSocketFactory()'. Действительно ли их документация советует вам использовать «TrustAllTrustManager»? Это не безопасно. – EJP

+0

@EJP Я попытался добавить строку 'LDAPConnection connection = new LDAPConnection (sslUtil.createSSLSocketFactory(). CreateSocket (HOST_ADDRESS, PORT)) ;, но он все еще говорит:« Конструктор LDAPConnection (Socket) не определен »! Конструктор ожидает 'LDAPSocketFactory'. любая идея, как я мог бы это создать? Не беспокоясь о безопасности для этого приложения, он работает в песочнице env. – ke3pup

+0

Извините, я не могу с этим поделать, но должен быть безопасный 'LDAPSocketFactory' или еще один способ его настройки с помощью' javax.net.SocketFactory.' – EJP

ответ

2

Фактически есть конструктор, который соответствует предоставленной подписи. Этот конструктор:

/** 
    * Creates a new LDAP connection using the specified socket factory. No 
    * actual network connection will be established. 
    * 
    * @param socketFactory The socket factory to use when establishing 
    *      connections. If it is {@code null}, then a default 
    *      socket factory will be used. 
    */ 
    public LDAPConnection(final SocketFactory socketFactory) 
    { 
    this(socketFactory, null); 
    } 

SSLSocketFactory является подклассом SocketFactory, поэтому код, приведенный в примере, должен работать без каких-либо проблем. Я просто подтвердил это, создав класс с этими тремя строками (создав SSLUtil, создав LDAPConnection и установив соединение), и он компилируется без каких-либо предупреждений или ошибок с использованием JDK 5, JDK 6 и JDK 7.

Также , чтобы ответить на другой комментарий, SDK LDAP не рекомендует создавать TrustAllTrustManager. Он предоставляет один пример, который использует TrustAllTrustManager, но есть другой пример, следующий ниже, который демонстрирует процесс использования хранилища доверия. Кроме того, документация для класса TrustAllTrustStore указывает, что он рекомендуется только для целей тестирования. Тем не менее, я только что внес изменения в пример SSLUtil, который делает эту рекомендацию еще более ясной.