将分页添加到InitialDirContext搜索结果

时间:2020-05-28 20:04:46

标签: java search pagination ldap

我有一个InitialDirContext连接到我的OpenLDAP服务器。现在,我有一个查询来获取所有LDAP用户,以便可以在UI中显示它们,但是我们估计将来会有成千上万的条目,因此我需要添加分页。有一个简单的方法可以用InitialDirContext做到这一点吗?我已经看过使用InitialLdapContext的教程,但是我无法使用该类成功模仿我的SSL连接,因此我不希望更改代码。

    Hashtable<String,Object> env = new Hashtable<>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put("java.naming.ldap.factory.socket", "javax.net.ssl.SSLSocketFactory");
    env.put(Context.SECURITY_PROTOCOL, "ssl");
    env.put(Context.PROVIDER_URL, ldapUrl+"/"+ldapBase);
    env.put(Context.SECURITY_CREDENTIALS, ldapPw);
    env.put(Context.SECURITY_PRINCIPAL, ldapUsername);
    DirContext ldapContext = null;
    try {
        ldapContext = new InitialDirContext(env);
    }
    catch (AuthenticationException e){
        log.error("Invalid Credentials");
    }
    catch (NamingException e){
        log.error(e.toString());
    }

    List<LdapUser> ldapUsers = new ArrayList<>();
    NamingEnumeration namingEnumeration = null;
    try {
        SearchControls controls = new SearchControls();
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        namingEnumeration = ldapContext.search("ou=People", "(objectclass=person)", controls);
        while (namingEnumeration.hasMore()) {
            SearchResult result = (SearchResult) namingEnumeration.next();
            Attributes attrs = result.getAttributes();
            ldapUsers.add(mapToLdapUser(attrs));
        }
    }
    catch (NamingException e){
        log.error(e.toString());
    }
    return ldapUsers;

此代码成功获取所有LDAP用户并将其映射到我的custon LdapUser类。如何对结果进行分页?

0 个答案:

没有答案
相关问题