我需要将一个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,但我也欢迎那些也适用于其他容器的策略。
答案 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服务器。