2010-09-29 75 views
4

好的,所以我將應用程序從非SSL轉移到SSL連接到我的LDAP服務器。在非SSL中運行應用程序時,連接池工作正常。但是,當我切換到SSL連接池不再工作。如何通過LDAP SSL啓用連接池?

在研究here時,我意識到我從不將「com.sun.jndi.ldap.connect.pool.protocol」屬性設置爲「普通ssl」,因爲默認情況下它設置爲普通。我認爲這是問題所在。

當我執行更改以包含「plain 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"); 
+1

@投票結束的人:這不屬於serverfault.com,因爲它是一個Java問題。 – 2010-09-30 07:46:35

回答

1

我發現了這個問題。該文檔明確指出,這些屬性是系統屬性而不是環境屬性。我將這些設置爲環境屬性。 :-)

0

如果向下滾動了一下,在你的鏈接提供(滾動到「如何連接彙集」),你會看到解釋如何統籌工作。

當您請求池連接時,只有在所有指定的屬性相同的情況下,纔會獲得一個連接。這是一個很長的屬性列表...

我你的情況是這樣的:

  • 連接控制
  • 主機名,如「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設置爲罰款。這將幫助您調試。

另一種選擇是使用支持連接池的框架或提供程序。請注意,Java提供給您的池是相當有限的。我過去使用過Spring-Ldap,它有很好的支持。

希望這會有所幫助。

+0

請您詳細說明一下嗎?我在上面的編輯中包含了代碼片段。 – 2010-10-04 20:43:41

+0

此外,我們只使用'簡單'方法,所以它只是少數幾個屬性......並且所有這些屬性似乎都已設置。 – 2010-10-04 20:55:04

+0

我編輯了我的答案。我希望它有幫助。 – 2010-10-05 08:09:00