NamingEnumeration hasMoreElements方法在为LDAP返回false时会花费大量时间

NamingEnumeration hasMoreElements方法在为LDAP返回false时会花费大量时间,ldap,Ldap,我正在尝试搜索LDAP服务器(Active Directory)。当我解析搜索结果时,当返回false时,namingumeration的hasMoreElements方法大约需要15-20秒才能执行。当它返回true时,情况并非如此。有没有办法解决这个问题 代码: AD在LDAP查询中返回的对象数有一个默认限制。我认为它在1000个物体范围内 如果你点击1001,返回1000,然后是一个错误,所以我可以看到这种情况 计算在一次测试中返回的对象数,如果超过1000个,则失败。上次调用hasMor

我正在尝试搜索LDAP服务器(Active Directory)。当我解析搜索结果时,当返回false时,
namingumeration
hasMoreElements
方法大约需要15-20秒才能执行。当它返回true时,情况并非如此。有没有办法解决这个问题

代码:


AD在LDAP查询中返回的对象数有一个默认限制。我认为它在1000个物体范围内

如果你点击1001,返回1000,然后是一个错误,所以我可以看到这种情况


计算在一次测试中返回的对象数,如果超过1000个,则失败。

上次调用
hasMoreElements()
时,
namingumeration
会进行一些清理。它还检查上下文属性
context是否有其他引用。reference
设置为“follow”。在我们的软件中的一个例子中,这恰好导致了所描述的行为:最后一次调用
hasMoreElements()
(或调用
hasMore()
或调用
next()
的频率超过了允许的频率)导致在LDAP上下文中搜索引用时长达40秒。解决方法是不要将
上下文。参考
设置为“遵循”

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
    }