У меня есть 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. Как я могу разбить результаты на страницы?