java jndi ldap连接超时

标签 java ldap timeout jndi

我想通过设置 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 响应传入的连接请求,因此客户端立即抛出异常。这是预期的行为。您肯定不想延迟收到错误?连接超时适用于目标主机暂时无法访问或目标服务真的很忙的情况。

关于java jndi ldap连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512864/

相关文章:

c# - Windows 事件日志中的 LdapConnection.SendRequest() 问题

android - HttpURLConnection.setConnectTimeout 不工作

java - 修改库时出现错误,因为无法解决 sun.misc.Unsafe

java - 如何使用 Java 将系统剪贴板内容粘贴到任意窗口

java - JSF、validateRegex 和 &(符号)

java - 如何使用 Jbutton 执行具有 main 方法的类

active-directory - 有没有使用 Nestjs 的 Active Directory 身份验证的好方法?

使用 AD 进行 LDAP 身份验证

java - Internet 上的 Java 聊天应用程序 | ConnectException(连接超时)

node.js - 检测可观察量何时连续两次发出相同的值