1

我正在尝试解决导致引发以下异常的 CAS 问题:

javax.naming.TimeLimitExceededException: [LDAP: error code 3 - Timelimit Exceeded]; remaining name ''
        at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3097)
        at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2987)
        at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
        at com.sun.jndi.ldap.LdapNamingEnumeration.getNextBatch(LdapNamingEnumeration.java:129)
        at com.sun.jndi.ldap.LdapNamingEnumeration.hasMoreImpl(LdapNamingEnumeration.java:198)
        at com.sun.jndi.ldap.LdapNamingEnumeration.hasMore(LdapNamingEnumeration.java:171)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:295)
        at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:361)...

几乎立即返回错误。客户端超时设置为 10 秒,但这并没有发生,因为根据查看 com.sun.jndi.ldap 代码,域控制器似乎正在返回状态为 3 的响应,表示超过时间限制。

我们正在访问 Active Directory 全局目录,我们的过滤器和基础非常广泛:base = '', filter = (proxyAddresses=*:someone@somewhere.com) 但是,查询有时会成功,但会立即返回状态代码 3 .

有谁知道可能导致这种行为的原因是什么?或者也许如何确定到底发生了什么?

4

1 回答 1

1

原来我们的搜索过滤器太宽泛了。

如您所见,我们在过滤器中使用了通配符,查询耗时不到 2 秒。

但是,2 秒比 Active Directory 配置的时间限制要短得多,所以我无法弄清楚为什么会立即发生错误(失败时甚至不需要 2 秒)。

我假设 AD 一定是在累积来自同一帐户的多个请求所花费的时间,并且在某个时候开始返回超出时间限制的错误。

为了解决这个问题,我们修改了搜索过滤器,使其不再包含通配符。然后搜索几乎立即运行,不再发生超出时间限制。

于 2013-05-13T14:28:29.533 回答