3

使用 Spring-LDAP 1.3.1 我试图读取 LDAP 的内容,但出现以下错误:

LDAP:错误代码 4 - 超出大小限制

在搜索了如何限制结果大小之后,我发现该类SearchControls负责它。

所以现在我的代码如下所示:

SearchControls controls = new SearchControls();
controls.setCountLimit(1);
ContextMapper mapper = new ContextMapper() {

    public Object mapFromContext(Object ctx) {
        DirContextAdapter adapter = (DirContextAdapter) ctx;
        Attributes attrs = adapter.getAttributes();
        try {
            return attrs.get("cn").get();
        } catch (NamingException e) {
            e.printStackTrace();
            return null;
        }
    }
};
return ldapTemplate.search("OU=system,DC=de", "(objectclass=person)", controls, mapper);

但是,仍然会引发相同的错误。getCountLimit()因此,似乎忽略了计数限制参数(加载依赖源后我在 Eclipse 中找不到对的引用)。

所以我的问题是,我应该如何使用 Spring-LDAP 设置 LDAP 查询的大小限制?

4

3 回答 3

1

您所指的大小限制是“客户请求的”大小限制。无论客户端将值设置为什么,它都无法覆盖服务器的大小限制资源限制。专业品质的服务器可以通过多种方式限制返回的条目数量,也许您的客户端已经遇到了限制之一。

也可以看看

于 2013-05-24T12:26:36.950 回答
0

如果您设置大小限制,服务器将限制对该值的响应数。但是,如果实际上可以返回更多响应,那么如果/当您尝试迭代超过限制时,您将获得该异常。

引用Javadoc 的 NamingEnumeration

在另一个示例中,如果使用指定的大小限制“n”调用了 search() 方法。如果答案包含超过 'n' 个结果,则 search() 将首先返回一个 NamingEnumeration。当通过在 NamingEnumeration 上调用 next() 返回第 n 个结果时,将在调用 hasMore() 时抛出 SizeLimitExceedException。

于 2015-01-09T04:01:18.553 回答
0

1) 您可以在 /etc/openldap/slapd.conf 中更改服务器大小的sizelimit参数。您可以在此处找到更多信息http://www.ldapadministrator.com/forum/sizelimit-exceeded-problem-t14.html

2)或者你可以限制你的查询,比如 eq。此处将 SQL/LDAP 查询限制为 901 行

于 2016-06-29T11:50:09.957 回答