如何使用unboundid SDK减少AD主机不可达时间的超时异常?

时间:2015-05-14 15:27:15

标签: java authentication sdk active-directory ldap

我正在使用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);

感谢。

1 个答案:

答案 0 :(得分:2)

由于您在构造函数中提供连接信息,因此构造函数正在建立连接。但是,在构造函数之后才设置连接选项,因此构造函数使用默认连接选项。

您应该使用LDAPConnection(SocketFactory,LDAPConnectionOptions,String,int)构造函数,而不是使用LDAPConnection(SocketFactory,String,int)构造函数。这将导致连接建立使用提供的连接选项而不是默认连接选项。