You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Spring LDAP的DirContextValidator解决连接池对象验证失败问题

问题根因

启用testOnBorrow、testWhileIdle连接池校验开关后,必须配套为PooledContextSource显式配置DirContextValidator实现,否则连接池没有校验DirContext有效性的逻辑,会直接抛出对象验证失败的异常。

正确配置方案

你可以直接使用Spring LDAP自带的默认校验器DefaultDirContextValidator,修改后的代码如下:

open fun create(): LdapTemplate {
    // 初始化DirContext校验器
    val dirContextValidator = DefaultDirContextValidator().apply {
        // 可选配置:校验时执行的搜索Base DN,默认是空字符串,可根据你的LDAP结构调整
        base = ""
        // 可选配置:校验时执行的搜索过滤器,默认是"(objectClass=*)"
        filter = "(objectClass=*)"
        // 可选配置:搜索返回的结果条数阈值,默认是0,只要返回结果不为空就判定校验通过
        searchResultLimit = 0
    }

    return LdapTemplate(PooledContextSource(
        PoolConfig().apply {
            maxTotalPerKey = 10
            isTestOnBorrow = true
            isTestWhileIdle = true
            minEvictableIdleTimeMillis = timeToMillis
        })
        .apply {
            contextSource = ldapContextSourceFactory.create()
            // 绑定校验器到连接池
            dirContextValidator = dirContextValidator
            // 可选配置:校验失败后是否丢弃该连接,默认是true,无需修改
            isRemoveAbandonedOnBorrow = true
        })
        .apply {
            setIgnorePartialResultException(true)
            afterPropertiesSet()
        }
}

自定义校验规则(可选)

如果默认的搜索校验逻辑不符合你的业务需求,你可以自行实现DirContextValidator接口,重写validateDirContext(DirContext ctx)方法,自定义校验逻辑返回布尔值标识校验是否通过即可。

内容的提问来源于stack exchange,提问作者Venot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:36:07