Как настроить пул соединений LDAP в контейнере Java EE? - PullRequest
5 голосов
/ 02 декабря 2008

Мне нужно поместить LDAP contextSource в дерево JNDI моего контейнера Java EE, чтобы его могли использовать приложения внутри контейнера.

Я использую Spring-LDAP для выполнения запросов к ORACLE OVD. Для разработки я просто настроил contextSource в конфигурационном файле Spring xml. Однако для производства мне нужно иметь возможность использовать поиск JNDI для получения соединения / контекста из контейнера (как предлагается здесь: http://forum.springframework.org/showthread.php?t=35122&highlight=jndi). У меня нет доступа к URL / имени пользователя / pwd для производственного экземпляра OVD, так что, похоже, исключается помещение его в файл jndi.properties.

В идеале, я хотел бы иметь пул соединений (точно так же, как JDBC), так как мое приложение может иметь много запросов LDAP, выполняемых одновременно. Захватить объект из поиска JNDI и вставить его в мой SimpleLdapTemplate кажется довольно простым, но я не знаю, как получить соединение / контекст / пул в дерево JNDI. Должен ли я построить его и упаковать в RAR? Если да, какие существуют варианты, позволяющие рабочей группе указывать URL / имя пользователя / pwd таким образом, чтобы они были недоступны для разработчиков?

Конкретным контейнером, который я использую, является OAS / OC4J, хотя я приветствую стратегии, которые работали и на других контейнерах.

Ответы [ 4 ]

7 голосов
/ 06 января 2009

В частности, применительно к фактическому пулу соединений LDAP, если вы используете встроенный поставщик LDAP JNDI, соединения уже объединяются с использованием семантики, аналогичной источникам данных JDBC, где отдельные пулы поддерживаются для разных URL-адресов LDAP и свойств безопасности.

При создании JNDI DirContext настройте для свойства com.sun.jndi.ldap.connect.pool значение true , и пул будет включен.

Более подробная информация о пуле LDAP здесь .

Подробности по настройке пула LDAP: здесь .

1 голос
/ 02 декабря 2008

Немного запутанно, но, возможно, ваш системный администратор может сохранить имя пользователя / пароль в вашей базе данных, либо в зашифрованном виде, либо в таблице с ограниченными правами доступа?

Нечто подобное (псевдо-бобы)

<bean id="ldapCredentialsProvider" 
    class="com.acme.YourCredentialsProvider"
    init-method="readCredentials">
    <property name="dataSource" ref="yourDataSource"/>
</bean>

<bean id="username"
    factory-bean="ldapCredentialsProvider" 
    factory-method="getUsername"/>

<bean id="password" 
    factory-bean="ldapCredentialsProvider" 
    factory-method="getPassword"/>

Edit:

А в dev ваш бин ldapCredentialProvider может быть простой реализацией на основе файлов свойств?

0 голосов
/ 15 января 2009

С помощью jboss вы можете интегрировать внешние контексты JNDI в пространство имен JNDI сервера JBoss. Все, что вам нужно сделать, это описать доступ LDAP в файле конфигурации MBean. Вы также можете включить кэширование.

Мы используем это решение для доступа к серверу Ative Directory.

http://www.jboss.org/community/docs/DOC-9726

0 голосов
/ 02 декабря 2008

Есть ли шанс, что вы сможете настроить dev-версию LDAP и использовать ее? Затем вы можете использовать файл jndi.properties, который будет зависеть от конкретной среды, но не зависит от вашей системы.

Редактировать: разница здесь в том, что когда вы создаете свое приложение, ваш администратор может развернуть его в производственной системе, тем самым защищая драгоценный пароль ldap, поскольку он существует только в файле свойств в производственном окне.

...