LDAP&;Java:如何检查PagedResultsControl和/或VLV是否可用
我需要为大型LDAP结果集实现分页,即按此处: 并非所有人都平等 此注释虽然很旧,但指出了一个事实,即不同的LDAP实现并不都支持此机制: Windows Active Directory服务器支持分页搜索控件。Oracle Directory Server 5.2版不支持它 最近的一篇文章显示Oracle Directory Server支持虚拟列表视图(vlv)的替代机制。 设计 对于实现,我想尝试一种机制,如果失败,则尝试另一种。(而不是如果AD这样做,如果Oracle这样做) 问题 在java中,如何检查当前LDAP/目录实例是否支持PagedControl或VLV?i、 e.我可以执行什么代码,我可以检查异常以了解它是否支持其中一个 谢谢有两种方法LDAP&;Java:如何检查PagedResultsControl和/或VLV是否可用,java,active-directory,ldap,Java,Active Directory,Ldap,我需要为大型LDAP结果集实现分页,即按此处: 并非所有人都平等 此注释虽然很旧,但指出了一个事实,即不同的LDAP实现并不都支持此机制: Windows Active Directory服务器支持分页搜索控件。Oracle Directory Server 5.2版不支持它 最近的一篇文章显示Oracle Directory Server支持虚拟列表视图(vlv)的替代机制。 设计 对于实现,我想尝试一种机制,如果失败,则尝试另一种。(而不是如果AD这样做,如果Oracle这样做) 问题
supportedControl
和supportedExtension
属性。VLV的OID为2.16.840.1.113730.3.4.9
。分页结果控件的OID为1.2.840.113556.1.4.319。
如果OID存在于supportControl
属性中,则支持相应的功能为了基于user207421的答案,我能够使用以下方法执行选项2:
private boolean isPagingSupported(DirContext dirContext)
throws NamingException {
Hashtable<?,?> environment = dirContext.getEnvironment();
URI uri = URI.create("" + environment.get("java.naming.provider.url"));
final String rootDse = uri.getScheme() + "://" + uri.getAuthority();
final Attributes attributes = dirContext.getAttributes(rootDse, new String[]{"supportedControl"});
final NamingEnumeration attributeValues = attributes.getAll();
while(attributeValues.hasMore()) {
final Attribute attribute = (Attribute) attributeValues.next();
final NamingEnumeration supportedControls = attribute.getAll();
while(supportedControls.hasMore()) {
String supportedControl = (String) supportedControls.next();
if(supportedControl.equals(PAGING_OID)) {
return true;
}
}
}
return false;
}
进一步阅读:
- 。请注意,本文档还提到检查
,这是不必要的2.16.840.1.113730.3.4.2
boolean pagingSupported = isPagingSupported(contextSource.getReadOnlyContext())