我正在尝试搜索LDAP服务器(Active Directory)。当我解析搜索结果时,hasMoreElements
NamingEnumeration
方法在返回false时大约需要15-20秒才能执行。当它返回true时不是这种情况。有没有办法解决这个问题?
代码:
SearchControls ctrl = new SearchControls();
ctrl.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(&(objectClass=user("uid"="abc"))";
NamingEnumeration ne = dirContext.search("ldap://abc:389/dc=abc,dc=xy", searchFilter,ctrl);
if (ne != null) {
while (ne.hasMoreElements()) {
//parse results
}
答案 0 :(得分:6)
NamingEnumeration
最后一次调用hasMoreElements()
时会进行一些清理。它还检查是否有其他引用是context-property Context.REFERRAL
设置为“follow”。在我们软件的一个案例中,这导致了所描述的行为:最后一次调用hasMoreElements()
(或hasMore()
或调用next()
比允许更频繁)导致最多40秒作为推荐在LDAP上下文中搜索。解决方案是不将Context.REFERRAL
设置为“关注”。
答案 1 :(得分:0)
AD具有在LDAP查询中返回的对象数量的默认限制。我认为它在1000对象范围内。
如果你点击1001,你会得到1000,然后是错误,所以我可以看到这种情况。
计算您在测试中获得的对象数量,然后打败1000,然后失败。