来自Web服务的LDAP调用是小心连接重置

时间:2017-06-16 15:50:25

标签: java rest ldap jndi connection-pooling

我开发了连接到LDAP并执行LDAP操作的REST Web服务。此服务部署在weblogic服务器上。部署应用程序时,正在初始化与LDAP的连接。

public class Initializer implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent arg0) {

    // Set up environment for creating initial context
    Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY,Constants.INITIAL_CONTEXT_FACTORY);
    env.put(Context.SECURITY_AUTHENTICATION,Constants.SECURITY_AUTHENTICATION);
    env.put(Context.SECURITY_PRINCIPAL, userName);
    env.put(Context.SECURITY_CREDENTIALS,password);
    env.put(Context.PROVIDER_URL,LDAP_URL);

    // Create initial context
    ctx = new InitialLdapContext(env, null);

    }

 public static LdapContext getLDAPContext() {
    return ctx;
    }

}

所以我使用getLDAPContext()来获取LDAP连接并调用JNDI操作来执行LDAP操作。这适用于单节点上的LDAP。

在更高的环境中,我们将LDAP部署在2个节点(不同的计算机)上,并在两个节点上启用了复制。我们在这两个节点上配置了VIP。

现在,当我提供LDAP VIP URL并进行LDAP连接时,我看到连接在一段时间后重置了我的Web服务调用中的异常。我认为这是由于我正在使用的VIP URL造成的。如果我指向单节点LDAP服务器,我没有看到这种行为。

我试图设置没有这样的超时。但它没有帮助。

env.put("com.sun.jndi.ldap.connect.timeout", "-1");

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

大多数负载均衡器在一定的配置时间间隔后关闭空闲连接。我看到你在init期间创建连接,并在其余的LDAP调用中使用此连接。一旦负载均衡器关闭了连接并且在客户端(在您的LDAP调用中),您尝试使用该连接,这就是为什么您正在获取这些异常,因为LDAP连接句柄已经过时。您需要捕获异常,并根据您需要再次在连接上执行init的异常类型。