Добавление пагинации к результатам поиска InitialDirContext - PullRequest
0 голосов
/ 28 мая 2020

У меня есть InitialDirContext, который подключается к моему серверу OpenLDAP. Прямо сейчас у меня есть запрос на получение всех пользователей LDAP, чтобы я мог отображать их в пользовательском интерфейсе, но мы предполагаем, что в будущем будут тысячи записей, поэтому мне нужно добавить разбиение на страницы. Есть ли простой способ сделать это с помощью InitialDirContext? Я видел учебные пособия с использованием InitialLdapContext, но мне не удалось успешно использовать c мое 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. Как я могу разбить результаты на страницы?

...