ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java jndi ldap连接超时

2019-11-02 07:04:10  阅读:506  来源: 互联网

标签:ldap timeout jndi java


我想通过设置com.sun.jndi.ldap.connect.timeout属性来控制连接超时.它适用于1000 ms以下的值,但是如果我将值设置为大于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响应传入的连接请求,因此立即在客户端引发异常.这是预期的行为.您确定不想延迟接收错误吗?连接超时适用于目标主机暂时无法访问或目标服务非常繁忙的情况.

标签:ldap,timeout,jndi,java
来源: https://codeday.me/bug/20191102/1989460.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有