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

标签 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 主机异常::: 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/

相关文章:

java - 生成随机数并在前面加0以保证位数固定

reactjs - 使用 React 进行 Kerberos 身份验证

gradle - 添加Google API后出现Gradle错误

java - 减少列表中的重复元素

java - 使用 Apache POI 读取 Excel .XLSX 时出错

java - 什么是 Java 字节码注入(inject)?

android - 使用 Parse Twitter/Facebook 身份验证注销或切换帐户

javascript - 获取已登录 Google 用户的用户个人资料图片/徽章

android - 当我使用域名而不是 IP 地址时 Red5Pro SDK 错误

Android sdk : java. lang.NullPointerException: 尝试调用虚拟方法