2008-12-02 56 views
5

我需要將LDAP contextSource放入我的Java EE容器的JNDI樹中,以便容器中的應用程序可以使用它。如何在Java EE容器中設置LDAP連接池?

我正在使用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/username/pwd有什麼選擇?

我正在使用的特定容器是OAS/OC4J,但我也歡迎在其他容器上工作的策略。

回答

7

特別參照LDAP連接的實際池,如果使用的是內置的JNDI LDAP提供程序,則連接已經使用類似於JDBC數據源的語義進行池化,其中爲不同的LDAP URL和安全屬性維護單獨的池。

當創建JNDI DirContext時,將屬性com.sun.jndi.ldap.connect.pool配置爲true並且將啓用池。

有關LDAP池的更多信息here

有關配置LDAP池的詳細信息是here

0

你有可能設置LDAP的開發版本並使用它?然後你可以使用一個jndi.properties文件,這個文件是特定於環境的,但是對你的系統是不可知的。

編輯:這裏的區別在於,當您構建應用程序時,管理員可以將其部署到生產系統,從而保護珍貴的ldap密碼,因爲它只存在於生產框的屬性文件中。

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豆可以是簡單的,基於屬性的文件執行?

0

使用jboss,可以將外部JNDI上下文聯合到JBoss服務器JNDI名稱空間中。 您所要做的只是描述MBean配置文件中的LDAP訪問。 您也可以啓用緩存。

我們正在使用此解決方案訪問Ative Directory服務器。

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