2016-01-22 90 views

回答

0

我們可以用SSUtil做到這一點。這裏不需要認證條目,我們可以在進行任何認證之前檢查服務器是啓動還是關閉。

SSLUtil su = new SSLUtil(new TrustAllTrustManager()); 
SSLSocketFactory sf = su.createSSLSocketFactory(); 
LDAPConnection connection = new LDAPConnection(sf,"localhost", 10636); 

尋找此解決方案的優缺點。

+0

騙局:你試圖預測未來。服務器在您進行測試時可能會啓動,在您進行驗證時服務器可能會啓動。或者相反。這是沒有意義的。 – EJP

+0

預測未來意味着什麼。只需要在進行任何身份驗證之前檢查服務器是啓動還是關閉。 – Malinda

0

有一種方法isConnected():

public boolean isConnected() 
Indicates whether this connection is currently established. 
Returns: 
true if this connection is currently established, or false if it is not. 

所以一個簡單的例子是這樣的:

LDAPConnection ldc = new LDAPConnection() 
ldc.connect(...); 
if (ldc.isConnected()) 
{ 
    do good stuff 
} 
else 
{ 
    getLDAPConnection(...); 
} 

應該做的伎倆。

+0

我需要知道LDAP服務器是否是做任何驗證之前向下或向上。在這個答案中,我必須使用經過身份驗證的條目來創建ldc連接。感謝你的付出。 – Malinda

+0

如果這可以按需要工作,我會感到驚訝。我希望它不會實際連接,直到你做了一些真正的LDAP操作。 – EJP

+0

ldc.isconnected實際上連接。據我所知,做一個 匿名呼叫到一些不存在的控制或擴展 – jwilleke

0

測試任何資源是否可用的最好方法就是嘗試在應用程序的正常過程中使用它,並在出現錯誤時處理它們。

否則你試圖預測未來。

0

檢查端口是否已啓動並正在運行。它是純Java。不需要SSL工廠或SSL上下文或證書。如果軟件包被防火牆丟棄,則會以毫秒爲單位超時。

import java.io.IOException; 
import java.net.InetSocketAddress; 
import java.net.Socket; 

public static boolean isPortReachable(String host, int port, int timeOutMS) { 
    try (Socket serverSocket = new Socket();) { 
     serverSocket.connect(new InetSocketAddress(host, port), timeOutMS); 
     return true;  
    } catch (final IOException e) { /* Ignore, Port not reachable */ } 
    return false; 
} 

用途爲LDAP或LDAPS:

if (isPortReachable(hostname, 389, 200)) { ... } 

if (isPortReachable(hostname, 636, 200)) { ... } 
相關問題