Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как включить пул соединений через LDAP SSL?

Автор вопроса: Fran FitzpatrickОтветов: 2

Хорошо, поэтому я перемещаю свое приложение с не-SSL на SSL-подключения к моему серверу LDAP. При запуске приложения без SSL пул соединений работает нормально. Однако, когда я переключаюсь на пулы SSL-соединений, они больше не работают.

Изучая здесь, я понял, что никогда не устанавливал " com.sun.jndi.ldap.connect.pool.protocol" на "обычный ssl", так как по умолчанию он установлен на обычный. Я думал, что это проблема.

Когда я реализовал изменение, включив "обычный ssl", это не решило проблему, и пулы соединений по-прежнему не использовались.

Есть ли какие-то другие настройки, которые мне не хватает?

Соответствующий код:

    Hashtable LDAPEnvironment = new Hashtable();
    LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION);
    LDAPEnvironment.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL);
    LDAPEnvironment.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);
    LDAPEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
    LDAPEnvironment.put(Context.PROVIDER_URL, PROVIDER_URL );
    LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, "simple");
    LDAPEnvironment.put("java.naming.ldap.version", versionOfLDAP );

    if (ldapProtocol != null && ldapProtocol.equalsIgnoreCase("SSL")){
        LDAPEnvironment.put(Context.SECURITY_PROTOCOL,"ssl");
        LDAPEnvironment.put("com.sun.jndi.ldap.connect.pool.protocol","plain ssl");
    }

    LDAPEnvironment.put("com.sun.jndi.ldap.connect.pool", "true");
  • @ Парень, который проголосовал за закрытие: это не принадлежит serverfault.com, потому что это проблема Java. Maurice Perry 30.09.2010

javasslldapconnection-pooling

Ответы

Ответ 1 · рейтинг 1 · Fran Fitzpatrick

Я нашел проблему. В документации конкретно указано, что эти свойства являются системными свойствами, а не свойствами среды. Я устанавливал их как свойства среды. :-)

Ответ 2 · Eran Harel

Если вы прокрутите немного вниз по предоставленной вами ссылке (прокрутите до "Как объединяются соединения"), вы увидите объяснение того, как работает объединение.

Когда вы запрашиваете объединенное соединение, вы получите его только в том случае, если ВСЕ указанные свойства идентичны. И это длинный список свойств...

В вашем случае это:

  • управление подключением
  • имя хоста, номер порта, указанный в свойстве "java.naming.provider.url", ссылка или URL-адрес, указанный в начальном контексте.
  • свойство java.naming.security.protocol
  • свойство java.naming.ldap.version
  • свойство java.naming.security.principal
  • Свойство java.naming.security.credentials

Если вы всегда используете одни и те же константы при запросе соединения из пула соединений, я думаю, вы должны получить одно и то же соединение из пула. То есть, если вы правильно установите свойства com.sun.jndi.ldap.connect.pool.*, но я не увидел этого в предоставленном вами коде.

Если вы установили для свойств com.sun.jndi.ldap.connect.pool.* разумные значения, попробуйте установить для com.sun.jndi.ldap.connect.pool.debug значение Fine. Это поможет вам отладить.

Другой вариант - использовать фреймворк или провайдера, который поддерживает пул соединений. Обратите внимание, что пул, предоставляемый вам Java, довольно ограничен. Раньше я использовал Spring-Ldap, и у него очень хорошая поддержка.

Надеюсь это поможет.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы