- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用 Spring LDAP 1.3.1 的应用程序。它正在创建 LdapTemplate在启动时的 Spring 上下文中,将其传递给我的应用程序。我连接到的 LDAP 字符串实际上是一个 VIP 设备,其背后有多个 Active Directory 服务器。
该应用程序用于创建组层次结构,并分几步完成。首先,它创建任何新组,然后删除任何已删除的组,然后更新和更改组,最后更新任何新组或移动组的父组。
在最后一步中,为了进行移动,我必须查找该组,然后查找它的父级,最后更新父级的成员列表以删除子级。
这就是问题的开始。每隔一段时间,但不是每次,我都有一个添加组的运行,但是当代码试图设置父级时,它失败了,因为新组还不存在。我相信正在发生的事情是 Spring LDAP 在每次调用时重新连接,并且因为我正在通过 VIP 并且 AD 服务器是循环的,我认为新添加的组没有复制,所以选择组返回null 并且我的父级更新失败。基本上我认为我遇到了 AD 复制的竞争条件。
所以,长解释短:Spring LDAP 1.3.1,特别是 LdapTemplate
,是否每次都创建一个新连接,或者我误解了它是如何工作的?有没有办法通过配置 LdapTemaplate
或设置 com.sun.jndi.ldap.connect.pool
使其使用池连接?如果我在整个应用程序运行中只使用一个连接,它应该可以解决复制(如果发生这种情况)问题,因为我会被困在一台 AD 服务器上而不会来回跳动。
最佳答案
对于所有可能偶然发现这篇文章的 future 开发者,这就是我解决问题的方式......
在 Spring LDAP 1.3.2 中,SingleContextSource没有采用 ContextSource 的构造函数,而是只有一个需要 DirContext .我没有看到任何方法可以从我的 LdapContextSource 中获取单个 DirContext
, 所以我无法使用 ig0774 的建议.
然而,在阅读了 Oracle 文档后,我发现它从 1.4.1 开始就内置了一个非常简单的 pooling mechanism .进一步阅读 LdapContextSource
的 Spring API 文档表明它能够通过调用 setPooled(boolean) 来打开此池机制。 .这基本上使得对连接的 close()
的调用不会真正关闭连接,而是将其返回到“池”。由于我的应用程序是一个大的线性线程,并且在给定时间只打开一个“连接”,这具有导致它简单地使用相同连接的净效果,从而绕过了我看到的问题是我的更新工作得更快比复制。打开内置池后,我的错误似乎停止了。
请注意,这不是为 LDAP 实现池化方案的好方法。正如 JavaDoc 所说,这种内置的池化机制有很多缺陷。如果你需要池,那么你最好使用 Spring LDAP 的 PoolingContextSource .然而,就我而言,我想要一个与“池”相反的东西,所以在这方面似乎对我来说是可行的。
另一种选择是不使用 VIP,而是直接连接到单个 Active Directory 服务器,但我失去了故障转移能力。
关于java - LdapTemplate 是否每次都关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21559482/
我在尝试使用 spring-ldap 并行搜索在 LDAP 上搜索组时遇到问题。 我正在进行批处理以将数据从 SQL 数据库加载到 LDAP。我使用 spring-boot 和 spring-ldap
我正在尝试将 Spring webapp 从 Websphere Application Server 迁移到 JBoss AS,但在部署时遇到了这个问题: org.springframework.b
我有一个使用 Spring LDAP 1.3.1 的应用程序。它正在创建 LdapTemplate在启动时的 Spring 上下文中,将其传递给我的应用程序。我连接到的 LDAP 字符串实际上是一个
我需要从名为 pwdAccountLockedTime 的策略覆盖中删除操作属性 我关注了this Q&A建议方式2: 使用LdapTemplate#modifyAttributes(Name, Mo
我想读取用户的所有组并将它们放入列表中。 这是 ldap 查询: ldapsearch -h [server_name] -p [port] -s sub -b "ou=people,ou=foo,o
在公司 Active Directory 中具有以下组织结构; DC=foo,DC=bar,DC=com OU=employees CN=employee1 CN=employee2 OU=inter
我正在尝试为所有人员对象查询 Activity 目录。有超过 700,000 个结果,太多了无法读入 List。我当前的解决方案是使用分页来获取所有结果,但我更愿意使用 Java-8 Stream-A
我正在尝试获取用户的详细信息。提供 SearchControls 时,它返回一个空列表。 @Override public User getUserDetails(String userName) {
关闭 Tomcat 后,我们看到许多有关可能内存泄漏的错误,因为 Tomcat 未能停止线程。根据 Tomcat 的说法,我们有大约 2600 个守护线程正在 com.sun.jndi.ldap.
我已经在 Spring Security LDAP 上苦苦挣扎了一段时间,就在我最终认为我已经被打败了的时候,它又把我绊倒了。 场景:我让用户使用他们的组织凭据登录,然后我检查内部用户数据库。如果它们
我有一个像这样的 Spring Data LDAP 存储库: package x.y.z.repository; import org.springframework.data.ldap.reposi
我正在尝试使用 Spring 的 LDAP 包对 Activity 目录进行身份验证,但我一直收到一条错误消息,提示我指定了错误的 baseDN(Ldap 错误代码 32): org.springfr
在spring ,如何嵌入ldap可以与 spring-ldap 一起使用模板。目前,我的配置是 -
对于一个 Spring Boot 应用程序,我使用 annotations 成功配置了一个 Spring LdapTemplate,包括 LdapContextSource 依赖与 @Values 来
我有一个使用 LDAP 对用户进行身份验证的 Spring Boot 应用程序。对于用户,我正在映射来自 AD 的属性并填充用户的名字、姓氏、部门、电子邮件、电话以及图像等值。但是,我无法从属性中获取
我在 Grails 应用程序中使用 Spring LDAP ( docs ) 库。我有一个用 @Entry 注释注释的类,因此它被映射到 LDAP 服务器。这一切都非常漂亮。 但是,当我添加 Grai
有人在 Ldap 中创建 posixAccount 时遇到过这个错误吗? javax.naming.directory.SchemaViolationException: [LDAP: error
我正在使用 spring-ldap-core-2.3.1.RELEASE.jar在 JDK 1.8 & Tomcat 8.0通过LdapTemplate访问AD信息. title等属性, depart
很长的问题,但简而言之,我想知道如何使用 Spring Java Config 设置 org.springframework.ldap.core.LdapTemplate#ignorePartialR
当我查找 DN 时带 Spring ldapTemplate , 我必须省略配置的基本 DN。 例如,当基本 DN 配置为 dc=company,dc=com 时,工作查找就像 ldapTemplat
我是一名优秀的程序员,十分优秀!