我正在尝试检索有关 LDAP 上的组的数据。因为我需要对结果进行分页,所以我需要运行范围查询。我的设置使用 JNDI 连接到 LDAP。我正在尝试运行此查询
(&(objectclass=group)(range=1-500))
我究竟做错了什么?我知道 LDAP 有基于范围的查询,如何修改此查询以获得相同的查询?
我正在尝试检索有关 LDAP 上的组的数据。因为我需要对结果进行分页,所以我需要运行范围查询。我的设置使用 JNDI 连接到 LDAP。我正在尝试运行此查询
(&(objectclass=group)(range=1-500))
我究竟做错了什么?我知道 LDAP 有基于范围的查询,如何修改此查询以获得相同的查询?
分页是一回事,范围是另一回事。当条目超过 1000 个时(至少这是 Active Directory 中的默认设置),您对从 LDAP 服务器返回的结果进行分页。
MSDN 有一篇关于如何在 .NET 中进行分页搜索的文章;希望您可以将其转化为您的环境。
范围是不同的东西。当您有一个member
具有大量值的多值属性(通常是组的 - 属性)时,您可以使用范围。所以你不能在查询中有范围。您需要在访问多值属性时指定范围(而不是仅member
在代码中指定访问您指定的属性值member;range=1-500
以从该多值属性中获取前 500 个值)。
如果您的 AD 是 2003 或更高版本,您可以考虑使用虚拟列表视图控件,而不是简单分页控件。虚拟列表视图提供了高级结果排序选项,让您可以更有效地控制搜索结果集的子集。
这是您需要查询以获取结果的方式
int start = 0;
int step = 1500;
int finish = 1499;
boolean finished = false;
String range;
String returnedAtts[] = {"member;Range=" + range};
searchCtls.setReturningAttributes(returnedAtts);
NamingEnumeration answer = readableDirContext.search(searchDN, searchFilter, searchCtls);