Spring LDAP:错误代码4 - 超出Sizelimit - 将countLimit设置为1时

时间:2013-05-24 12:04:01

标签: java ldap spring-ldap

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

  

LDAP:错误代码4 - 超出Sizelimit

在搜索如何限制结果大小后,我发现类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);

但是,仍然会抛出同样的错误。所以,似乎忽略了count限制参数(在加载依赖源之后,我在Eclipse中找不到对getCountLimit()的引用)。

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

3 个答案:

答案 0 :(得分:1)

您引用的大小限制是“客户端请求的”大小限制。无论客户端将值设置为什么,它都不能覆盖服务器的大小限制资源限制。专业品质的服务器可以通过多种方式限制返回的条目数,也许您的客户端已达到其中一个限制。

另见

答案 1 :(得分:0)

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

引用Javadoc for NamingEnumeration

  

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

答案 2 :(得分:0)

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

2)或者你可以限制你的查询,如eq。这里Limit SQL/LDAP Query to 901 Rows