如何在Java EE容器中设置LDAP连接池?

时间:2008-12-02 17:44:16

标签: java spring java-ee ldap jndi

我需要将一个LDAP contextSource放入我的Java EE容器的JNDI树中,以便容器内的应用程序可以使用它。

我正在使用Spring-LDAP对ORACLE OVD执行查询。对于开发,我只需在Spring xml配置文件中设置contextSource。但是,对于生产,我需要能够使用JNDI查找从容器中获取连接/上下文(如此处所示:http://forum.springframework.org/showthread.php?t=35122&highlight=jndi)。我不允许访问生产OVD实例的URL / username / pwd,所以这似乎排除了将它放在jndi.properties文件中。

理想情况下,我想拥有一个连接池(就像JDBC一样),因为我的应用程序可能同时执行许多LDAP查询。从JNDI查找中抓取对象并将其注入到我的SimpleLdapTemplate中似乎非常简单,但我不知道如何将连接/上下文/池添加到JNDI树中。我需要构建它并将其打包成RAR吗?如果是这样,有哪些选项让运营团队以开发人员无法访问的方式指定URL /用户名/密码?

我使用的特定容器是OAS / OC4J,但我也欢迎那些也适用于其他容器的策略。

4 个答案:

答案 0 :(得分:7)

特别是在引用LDAP连接的实际池时,如果您使用的是内置的JNDI LDAP提供程序,则已使用与JDBC数据源类似的语义来池化连接,其中为不同的LDAP URL和安全属性维护单独的池。

创建JNDI DirContext时,将属性com.sun.jndi.ldap.connect.pool配置为 true ,并启用池。

有关LDAP池here的更多信息。

配置LDAP池的详细信息为here

答案 1 :(得分:1)

有点令人费解,但是你的系统管理员可能会在你的数据库中存储用户名/密码,加密,或者在访问权限有限的桌子上存储?

像(伪豆)

之类的东西
<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"/>

编辑:

在开发中,您的ldapCredentialProvider bean可能是一个简单的基于属性文件的实现吗?

答案 2 :(得分:0)

您是否有机会设置开发版的LDAP并使用它?然后,您可以使用jndi.properties文件,该文件是特定于环境的,但与您的系统无关。

编辑:这里的区别在于,当您构建应用程序时,您的管理员可以将其部署到生产系统,从而保护珍贵的ldap密码,因为它只存在于生产框的属性文件中。

答案 3 :(得分:0)

使用jboss,您可以将外部JNDI上下文联合到JBoss服务器JNDI名称空间中。 您所要做的就是在MBean配置文件中描述LDAP访问。 您也可以启用缓存。

我们正在使用此解决方案访问Ative Directory服务器。

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