Spring security Spring安全ldap连接管理

Spring security Spring安全ldap连接管理,spring-security,spring-ldap,Spring Security,Spring Ldap,我正在使用spring security对登录到webapp的用户进行身份验证。身份验证当前使用ldap完成 在我的webapp和ldap服务器之间有一个防火墙。不活动50分钟后,防火墙将刷新空闲的ldap连接 Spring security有时会重用现有连接,但并不总是这样。如果它选择了防火墙关闭的连接,登录将失败 我在Tomcat日志中发现的异常如下 org.springframework.ldap.ServiceUnavailableException: ldap:389; socket

我正在使用spring security对登录到webapp的用户进行身份验证。身份验证当前使用ldap完成

在我的webapp和ldap服务器之间有一个防火墙。不活动50分钟后,防火墙将刷新空闲的ldap连接

Spring security有时会重用现有连接,但并不总是这样。如果它选择了防火墙关闭的连接,登录将失败

我在Tomcat日志中发现的异常如下

org.springframework.ldap.ServiceUnavailableException: ldap:389; socket closed; nested exception is javax.naming.ServiceUnavailableException
更具体地说,导致问题的连接是用于搜索请求的连接。它们没有被框架系统地封闭。绑定请求总是在请求结束时关闭的新连接上进行

在我的应用程序中,由于自定义LdapAuthoritiesPopulator仅授予具有特定角色的用户访问权限,因此绑定后会发出搜索请求。我已经验证了默认的LdapAuthoritiesPopulator以相同的方式发出搜索请求

搜索请求连接几乎无限期地保持打开状态是否正常? 如果是,有没有办法改变spring security管理其连接的方式

我还想知道是否有比使用自定义LdapAuthoritiesPopulator在身份验证期间强制执行角色约束更好的方法

尝试轻松升级后,我的问题仍然存在:

  • 弹簧安全3.1.7(从3.1.2增加)
  • SpringLDAP核心2.0.2(从1.3.0升级)
  • SpringLDAP 1.3.1(从1.3.0升级)

谢谢。

解决方案是使用ldap spring池和验证。

好的第一步是定义
。这样,所有的请求——绑定或搜索——都是在一个独立的连接上进行的

如果要处理大量ldap连接并希望最小化连接开销,则必须设置其他对象来定义连接池行为。这在文件中都解释得很清楚


从SpringLDAP 1.3开始,您需要将commons pool 1.6添加到您的项目中。

现在使用哪个版本?