我正在使用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 Host Exception ::: LDAPException(resultCode = 91(connect error),errorMessage ='尝试连接到服务器000.000.00.00:369时发生错误:java.io.IOException:无法在配置的超时60000毫秒内建立与服务器000.000.00.00:369的连接。')"
但我需要在20秒内抛出错误。我设置超时限制如下,但没有效果。 options.setResponseTimeoutMillis(20000); options.setConnectTimeoutMillis(20000);
感谢。
答案 0 :(得分:2)
由于您在构造函数中提供连接信息,因此构造函数正在建立连接。但是,在构造函数之后才设置连接选项,因此构造函数使用默认连接选项。
您应该使用LDAPConnection(SocketFactory,LDAPConnectionOptions,String,int)构造函数,而不是使用LDAPConnection(SocketFactory,String,int)构造函数。这将导致连接建立使用提供的连接选项而不是默认连接选项。