2014-10-16 50 views
0

我用下面的代碼從一個獨立的Java應用程序驗證用戶身份的性能:LDAPS綁定從Java

import java.util.Hashtable; 

import javax.naming.Context; 
import javax.naming.directory.InitialDirContext; 


public class Authenticate 
{ 
public static void main(String[] args) 
{ 
    try 
    { 
     Hashtable<String, String> env = new Hashtable<String, String>(); 

     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, "LDAPS://my_ldap_server:636"); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.SECURITY_PRINCIPAL, 
      "[email protected],CN=myCustomers,CN=PartX,DC=testCom,DC=local"); 
     env.put(Context.SECURITY_CREDENTIALS, "user_password"); 
     env.put(Context.SECURITY_PROTOCOL, "ssl"); 

     for (int i = 0; i < 50; i++) 
     { 
      long start = System.currentTimeMillis(); 
      new InitialDirContext(env); 
      // send request, wait for response 
      long end = System.currentTimeMillis(); 
      System.out.println("Round trip response time = " 
       + (end - start) + " millis"); 
     } 

     System.out.println("Welcome"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

我得到每綁定接近200毫秒,這是非常高的響應時間。我的問題是別人在從java執行LDAP綁定時看到的響應時間。

必須有其他方法將用戶與LDAP綁定。請分享你的方法。我有一個綁定操作的.NET實現,它在大約20毫秒時執行。任何的意見都將會有幫助。

在此先感謝。

+0

您好專家。請輸入其他任何內容?特別是針對其他綁定用戶的java實現看到的響應時間。 – Aspirant 2014-10-28 17:49:23

回答

-1
  1. 您的測試無效。您沒有關閉InitialContext。在一個正常的系統中,你可能會啓用LDAP連接池,這將完全改變圖像。
  2. LDAP綁定不是一個決定速度的步驟,但我很確定我的速度比這更快。
  3. 在Java JNDI中通過LDAP進行綁定的唯一方法是通過LdapContext.reconnect()進行綁定,但是在底層,它將在線路上完成相同的事情。
+0

@downvoter爲什麼? – EJP 2014-10-18 00:07:30

0

根據Oracle的LDAP/LDAPS身份驗證實施 - 無論有沒有連接池 - 都會創建LDAPClient。這個lDAPClient創建一個LDAPConnection,並在執行綁定/身份驗證後關閉連接。

如果連接池屬性設置爲true,那麼只有當安全主體和密碼相同時,纔會使用池連接。

對於擁有一百萬用戶的網絡應用程序,我們不應該聯網。這會使ldap服務器過載。

ldap客戶端和連接代碼位於java rt.jar中。在ldaps/ssl的情況下,相對於沒有ssl的ldap觀察到延遲。

如果找到了指示ldap客戶端使用相同ldap連接對象的方式 - 就像我們使用jdbc連接一樣 - 那麼ldap認證可以大大優化。

當我們嘗試僅搜索用戶而不是嘗試執行身份驗證時,Ldap連接池是有意義的。

總之,我同意原始海報。使用LDAPS身份驗證時會出現性能延遲。我也想聽聽別人的經驗。

+0

連接池連接將如何超載LDAP服務器,而不是連接池會超載嗎?連接池與「指示ldap客戶端使用相同的ldap連接對象的方式」有什麼不同? – EJP 2014-10-17 03:20:53