Java jndi ldap连接超时



我想通过设置com.sun.jndi.ldap.connect.timeout属性来控制连接超时。对于小于1000毫秒的值,它工作得很好,但如果我设置的值大于1000,超时不会增加(它保持在1000)。

下面是我试图测试它的代码(服务器关闭):

long start = System.currentTimeMillis();
try
{
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://localhost:10389");
    env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
    env.put(Context.SECURITY_CREDENTIALS, "secret");
    env.put("com.sun.jndi.ldap.connect.timeout", "10000");
    InitialLdapContext context = new InitialLdapContext(env, null);
} catch (NamingException e)
{
    System.out.println("Failed because " + e.getRootCause()
            .getMessage() + ". Timeout: " + ((System.currentTimeMillis() - start)) + " ms.");
}

是什么原因导致的?

如果目标主机使用错误代码响应连接请求,则一旦接收到错误代码,连接就会失败。似乎目标主机已启动,目标LDAP服务没有在端口10389侦听。因此,目标主机使用RST响应传入的连接请求,因此立即在客户端抛出异常。这是预期的行为。您肯定不希望延迟接收错误吧?连接超时用于目标主机暂时不可达或目标服务确实忙的情况。

这是一篇关于这个话题的文章。看来这个性质并不是这样的。

相关内容

  • 没有找到相关文章

最新更新