Как включить пул соединений по LDAP SSL? - PullRequest
4 голосов
/ 30 сентября 2010

Хорошо, поэтому я перевожу свое приложение с соединений без 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");

Ответы [ 2 ]

1 голос
/ 06 октября 2010

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

0 голосов
/ 01 октября 2010

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

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

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

  • контроль соединений
  • имя хоста, номер порта, указанный в свойстве "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 в прошлом, и у него очень хорошая поддержка.

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

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