使用java的LDAP广告分页

使用java的LDAP广告分页,java,active-directory,ldap,spring-ldap,Java,Active Directory,Ldap,Spring Ldap,在LDAP AD中尝试从组中获取成员时,我遇到了一些问题 1) 我需要1000页大小,但它返回1500名成员(myside是否有任何问题或需要询问管理员??) 2) Cookie值总是空的,我不确定缺少什么。Cookie为null,resultpagesize为null 如果你遇到这个问题并解决了这个问题,请帮助我 Hashtable<String, Object> env = new Hashtable<String, Object>(); LdapContext ct

在LDAP AD中尝试从组中获取成员时,我遇到了一些问题

1) 我需要1000页大小,但它返回1500名成员(myside是否有任何问题或需要询问管理员??)

2) Cookie值总是空的,我不确定缺少什么。Cookie为null,resultpagesize为null

如果你遇到这个问题并解决了这个问题,请帮助我

Hashtable<String, Object> env = new Hashtable<String, Object>();
LdapContext ctx;
byte[] cookie = null;
try {
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost");
env.put(Context.SECURITY_PRINCIPAL,"cn=testaccount");
env.put(Context.SECURITY_CREDENTIALS, "passwd");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
ctx = new InitialLdapContext(env, null);
SearchControls searchCtls = new SearchControls();
String returnedAtts[]={"member"};
searchCtls.setSearchScope(2);
searchCtls.setReturningAttributes(returnedAtts);
ctx.setRequestControls(new Control[] { new PagedResultsControl(1000, false) });
do {
    NamingEnumeration answer = ctx.search("", "(&(objectClass=group)(cn=testgroup))", searchCtls);
    while (answer.hasMore()) {
        SearchResult entry = (SearchResult) answer.next();
            String attrsValaues = entry.getAttributes().toString();
            System.out.println(attrsValaues);
        }
        Control[] controls = ctx.getResponseControls();
        if (controls != null) {
            for (int i = 0; i < controls.length; i++) {
                System.out.println(controls[i]);
                if (controls[i] instanceof PagedResultsResponseControl) {
                    PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
                    cookie = prrc.getCookie();
                }
            }
        }
        ctx.setRequestControls(new Control[] { new PagedResultsControl(1000, cookie, false) });
    } while(cookie!=null);
} catch (Exception e) {
    e.printStackTrace();
}
Hashtable env=new Hashtable();
LdapContext ctx;
字节[]cookie=null;
试一试{
put(Context.INITIAL_Context_工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.PROVIDER\u URL,“ldap://localhost");
环境put(Context.SECURITY_PRINCIPAL,“cn=testaccount”);
环境put(Context.SECURITY_凭证,“passwd”);
环境put(Context.SECURITY_认证,“simple”);
ctx=新的InitialLdapContext(env,null);
SearchControls searchCtls=新的SearchControls();
字符串returnedAtts[]={“member”};
搜索控制设置搜索范围(2);
searchCtls.设置ReturningAttributes(returnedAtts);
setRequestControls(新控件[]{new PagedResultsControl(1000,false)});
做{
NamingEnumeration answer=ctx.search(“,”(&(objectClass=group)(cn=testgroup)),searchCtls);
while(answer.hasMore()){
SearchResult条目=(SearchResult)answer.next();
字符串attrsvalues=entry.getAttributes().toString();
System.out.println(属性值);
}
Control[]controls=ctx.getResponseControl();
if(控件!=null){
for(int i=0;i
我找到了一种不使用cookie获取用户的方法

boolean endString = true;
int loopValue = 0;
while (endString) {
    int startValue = loopValue * 1000;
    int endvalue = (loopValue + 1) * 1000;
    SearchControls searchCtls = new SearchControls();
    String[] returnedAttrs = new String[1];
    String range = startValue + "-" + endvalue;
    returnedAttrs[0] = "member;range=" + range;
    searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    searchCtls.setReturningAttributes(returnedAttrs);
    NamingEnumeration answer = ctx.search("", "(&(objectClass=group)(cn=testgroup))", searchCtls);
    while (answer.hasMore()) {
        SearchResult entry = (SearchResult) answer.next();
        System.out.println(entry.getAttributes());
        if (entry.getAttributes().toString().contains("{member;range=" + startValue + "-*")) {
            endString = false;
        }
    }
    loopValue++;
}

SpringLDAP 1.3.2及更高版本中提供了范围支持。有关搜索结果,请参见分页。使用范围获取大型属性列表不是分页。不是吹毛求疵,只是想让你知道我们在寻找答案。耶,我同意你的观点,ixe013…我使用的是spring-ldap-1.3.1,无法升级。因此,我使用了另一种方法来获得如下所示的结果。如果组中的用户数为1000的倍数,则此解决方案似乎不起作用。它返回“{member;range=“+startValue+”-“+endValue”,并为下一页抛出:LDAP:错误代码1-00002121:SvcErr:DSID-031206B8,问题5012(DIR_error),数据8995