`

LDAP connection issue

 
阅读更多
Problem1:

Sometimes we can not get LDAP connection from LDAP server.

Cause1:
We can not close LDAP connection when program is end.

Solution1-1(don't do that):


Currently our code to close LDAP connection are as below,

LdapContext cladptx = null;
NamingEnumeration<?> results = null;
try {
cladptx = createConnection();
results = cladptx.search(ldapConnector.getEntry(), filter, constraints); } catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
try {
if (cladptx != null) {
cladptx.close();
}
} catch (Exception e2) {
logger.error(e2.getMessage(), e2);
}
}

But actually LDAP connection was not closed completely.

Solution1-2(Good solution):

We need to close various parameters of context and NamingEnumeration.Code as below,

LdapContext cladptx = null;
NamingEnumeration<?> results = null;
try {
cladptx = createConnection();
results = cladptx.search(ldapConnector.getEntry(), filter, constraints);

} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
try {
if(results!=null) {
results.close();
}
if (cladptx != null) {
cladptx.close();
}
} catch (Exception e2) {
logger.error(e2.getMessage(), e2);
}
}

Problem2:

After I closed various parameters and ran a test which loops 4000 times on a LDAP client application, I observed the following errors in Windows Operating System when the load increased beyond a certain threshold:

    javax.naming.CommunicationException: localhost:10389 [Root exception is java.net.BindException: Address already in use: connect]
    at com.sun.jndi.ldap.Connection.<init>(Connection.java:210)
    at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:118)
    </init></init>

Cause2:

The causes for the errors are that the dynamic ports in the OS are running out so that client application can not make any more connections to LDAP server.
Usually LDAP server is running on a specific port (say 10389) and when a connection is created from client, that is assigned a port in the range of dynamic ports which is defined as a property of Windows OS. This issue is not visible on Linux.

So the above errors can occur when no available ports are left.

Solution2:

We'd better use connection pool to solve this problem.See below code,

InitialDirContext context = null;
try {
System.setProperty("com.sun.jndi.ldap.connect.pool.maxsize", "50");
Hashtable<String,String> env = new Hashtable<String,String>();
//env.put("com.sun.jndi.ldap.connect.pool", "true");
context = new InitialDirContext(env);
} catch (NamingException e) {
logger.error(e.getMessage(),e);
}

Conclusion
1. Enable LDAP connection pooling when creating the connection to the LDAP..
2. Close all sub Contexts and NamingEnumerations derived from a particular LDAP connection Context, close them explicitly at the end of their usage.
分享到:
评论

相关推荐

    LDAP-Java-api:这是一个简单的 LDAP 连接 Java API

    Easy-LDAP-Connection-Java-API 介绍 这是一个简单的 LDAP 连接 Java API,提供了一个基本的数据库接口。 创建一个新用户 获取用户 更新用户字段 删除用户 自定义过滤 我的意图不是实现所有东西,我只是想要一个...

    LdapBrowser ldap连接工具

    **LDAP浏览器:深入理解与应用** LDAP(轻量级目录访问协议)是一种用于查询和管理分布式目录服务的网络协议,广泛应用于企业环境中的用户身份验证、权限管理和数据共享。LdapBrowser是一款专为开放源代码的...

    LdapBrowser2.82版和LDAP使用手册

    **LDAP简介** LDAP,全称为轻量级目录访问协议(Lightweight Directory Access Protocol),是一种用于访问和管理分布式目录服务的标准网络协议。它主要用于存储和检索用户、组织、资源等信息,广泛应用于身份验证...

    ldap安装与客户端ldapadmin windows

    **LDAP(轻量级目录访问协议)是一种网络协议,用于访问和管理分布式目录服务。它在各种操作系统上广泛使用,包括Windows。本文将详细介绍在Windows环境下安装LDAP服务器以及使用 LDAP 客户端工具 LdapAdmin 的步骤...

    简单的ldap客户端,可替代ldapAdmin

    **LDAP简介** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,常用于存储和检索用户账户、联系人信息、配置数据等结构化信息。它基于X.500标准,但设计得更为简单且适合互联网环境。LDAP...

    LdapAdmin---LDAP工具

    **LDAP(轻量级目录访问协议)是一种用于访问和管理分布式目录服务的协议,广泛应用于组织内部的身份验证、用户及资源管理。LdapAdmin是一款专为Windows操作系统设计的高效、稳定的LDAP管理工具,它允许管理员便捷地...

    java连接LDAP的jar包和实例

    connection.connect(ldapUrl, LDAPConnection.LDAP_V3); connection.bind(bindDN, bindPassword); // 搜索LDAP String filter = "(objectClass=*)"; LDAPSearchResults results = connection.search("dc=...

    ldap 浏览器 LdapBrowser282

    **LDAP浏览器LdapBrowser282详解** LDAP(Lightweight Directory Access Protocol)是一种用于访问目录服务的协议,常用于组织和管理用户、组、资源等信息。LdapBrowser282是一款专门针对LDAP目录服务的浏览和管理...

    ldapadmin,windows下管理ldap的工具

    **LDAPadmin:Windows环境下的LDAP管理工具** 在IT领域,LDAP(Lightweight Directory Access Protocol)是一种广泛用于存储和检索用户信息、配置数据等目录服务的数据访问协议。它为分布式网络提供了一个标准的...

    LdapBrowser282.rar_LdapBrows_LdapBrowser.282_ldap_ldapBrowser_op

    标题中的"LdapBrowser282.rar_LdapBrows_LdapBrowser.282_ldap_ldapBrowser_op"指的是LdapBrowser的282版本的压缩文件,它包含了该软件的相关组件和可能的操作指南。LdapBrowser是一款专用于管理和查看OpenLDAP...

    ldap.zip_LDAP DELPHI_delphi ldap

    【LDAP与DELPHI在开发电话簿应用中的整合】 LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,常用于存储和检索用户、组织等结构化数据。它允许客户端通过TCP/IP协议来访问分布式目录服务...

    svn+ldap+sasl认证(svn通过ldap用户进行认证登陆)

    在实现 svn+ldap+sasl 认证时,需要安装 ldap 服务器和配置 ldap 服务,然后在 svn 服务器中配置 sasl 认证协议,使用 ldap 服务器进行用户认证。下面是实现 svn+ldap+sasl 认证的步骤: 1. 安装 ldap 服务器 首先...

    ldapbrowser,LDAP连接工具

    **LDAP浏览器:强大的目录服务管理工具** 在信息技术领域,LDAP(Lightweight Directory Access Protocol)是一种用于访问和管理分布式目录服务的协议。它被广泛应用于组织内部的用户认证、权限管理和数据存储。`...

    spring boot集成ldap

    在Spring Boot项目中,我们可以使用`spring-boot-starter-ldap`和`spring-boot-starter-data-ldap`这两个starter来引入LDAP支持。在`pom.xml`或`build.gradle`文件中添加如下依赖: ```xml &lt;groupId&gt;org.spring...

    使用Delphi连接LDAP服务器

    `LDAP`(轻量级目录访问协议)则是一种用于访问和管理分布式目录服务的标准协议,常用于存储和检索用户、组织和其他资源的信息。本篇文章将深入探讨如何使用Delphi来连接并操作LDAP服务器。 首先,我们需要了解...

    非常好用的ldap连接工具

    **LDAP(Lightweight Directory Access Protocol)连接工具是用于管理和访问 LDAP 目录服务的重要软件,它使得用户可以方便地查询、编辑和管理存储在 LDAP 服务器中的数据。ApacheDirectoryStudio 是一个开源、跨...

    对LDAP的基本操作(Spring-ldap)+Ext实现显示LDAP的树状结构

    资源没有对LDAP创建的内容。 资源主要有: rar包:一个Web工程, 主要有,利用Spring-ldap对LDAP的基本操作(查询,增删改);Extjs实现的对Ldap的树状结构的显示,结构有点类似Softerra LDAP;一个测试类。 pdf:...

    禅道开源版11.5LDAP插件

    禅道开源版11.5 LDAP插件是一个用于禅道项目管理软件的扩展工具,它主要功能是集成轻量级目录访问协议(LDAP)进行用户身份验证。此插件允许禅道系统与LDAP服务器通信,使得用户可以通过已有的LDAP账户登录禅道,...

    LDAP编辑器:可以连接LDAP和编辑LDAP数据

    **LDAP编辑器:连接与编辑LDAP数据** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,常用于组织和管理分布式身份信息。它提供了一种标准的方式来存储和检索用户、组、服务等对象的数据...

    JAVA中使用LDAP进行用户认证

    JAVA中使用LDAP进行用户认证 JAVA中使用LDAP进行用户认证是指在JAVA应用程序中使用轻量级目录访问协议(LDAP)来进行用户身份验证。LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行...

Global site tag (gtag.js) - Google Analytics