使用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查询的大小限制?
答案 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