我正在使用UNBOUNDID SDK进行AD服务器身份验证
public static Boolean adAuthentication(String ldapUrl, int ldapPort,
String bindUserName, String bindPassword) {
SSLUtil sslUtil = new SSLUtil(null, new TrustAllTrustManager());
SocketFactory socketFactory;
LDAPConnection ldapConnection = null;
Boolean isAuthentic = null;
try {
socketFactory = sslUtil.createSSLSocketFactory();
LDAPConnectionOptions options = new LDAPConnectionOptions();
options.setAbandonOnTimeout(true);
**options.setResponseTimeoutMillis(10000);
options.setConnectTimeoutMillis(10000);**
ldapConnection = new LDAPConnection(socketFactory, ldapUrl, ldapPort);
ldapConnection.setConnectionOptions(options);
if(ldapConnection.isConnected()){
final BindRequest bindRequest = new SimpleBindRequest(bindUserName, bindPassword);
final BindResult bindResult = ldapConnection.bind(bindRequest);
final ResultCode resultCode = bindResult.getResultCode();
isAuthentic = resultCode.equals(ResultCode.SUCCESS) ? true : false;
ldapConnection.close();
}
} catch (LDAPException ldapException) {
logger.error("AD Host Exception ::: "+ ldapException);
} catch (GeneralSecurityException exception) {
logger.error("AD Security Exception ::: " + exception);
}finally{
if(ldapConnection!= null)
ldapConnection.close();
}
return isAuthentic;
}
此代码在 AD 服务器可访问时间上工作正常,假设 AD 服务器无法访问,这意味着它会在 60 秒后抛出以下错误
“AD 主机异常::: LDAPException(resultCode=91(连接错误),errorMessage='尝试连接到服务器 000.000.00.00:369 时发生错误:java.io.IOException:无法建立到的连接服务器 000.000.00.00:369 在配置的超时 60000 毫秒内。')"
但是我需要在 20 秒内抛出错误。我设置超时限制如下但没有效果。 选项.setResponseTimeoutMillis(20000); options.setConnectTimeoutMillis(20000);
谢谢。
最佳答案
由于您在构造函数中提供连接信息,因此构造函数正在建立连接。但是,直到构造函数之后才设置连接选项,因此构造函数使用默认连接选项。
您应该使用 LDAPConnection(SocketFactory,LDAPConnectionOptions,String,int) 构造函数,而不是使用 LDAPConnection(SocketFactory,String,int) 构造函数。这将导致连接建立使用提供的连接选项而不是默认的。
关于java - 如何使用unboundid SDK减少AD主机不可达时间的超时异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241191/