如何在进行身份验证之前检查当前LDAP服务器是启动还是关闭

时间:2016-01-22 11:48:58

标签: java ldap unboundid-ldap-sdk

我想在进行身份验证之前检查当前的LDAP服务器是启动还是关闭。我正在使用UnboundID LDAP SDK。有没有可能的方法呢?

4 个答案:

答案 0 :(得分:1)

检查端口是否已启动并正在运行。这是纯粹的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)) { ... }

答案 1 :(得分: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(...);
}

应该做的伎俩。

答案 2 :(得分:0)

测试任何资源是否可用的最佳方法只是尝试在应用程序的正常过程中使用它,并在出现错误时应对。

否则你会试图预测未来。

答案 3 :(得分:0)

我们可以使用SSUtil来做到这一点。这里不需要经过身份验证的条目,我们可以在进行任何身份验证之前检查服务器是启动还是关闭。

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

寻找此解决方案的优缺点。