我有一个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类。如何对结果进行分页?