版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30698633/article/details/82825754
1、添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
2、编写分页代码
LdapContext ctx = null;
Hashtable<String, String> HashEnv = new Hashtable<String, String>();
HashEnv.put(Context.PROVIDER_URL, ldapUrl);
// LDAP访问安全级别(none,simple,strong)
HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
//AD的用户名
HashEnv.put(Context.SECURITY_PRINCIPAL, ldapUsername);
//AD的密码
HashEnv.put(Context.SECURITY_CREDENTIALS, ldapPassword);
HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//连接超时设置为3秒
HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000");
int pageSize = 15;
int currentPage = 0;
int total = 0;
try {
// 初始化连接
ctx = new InitialLdapContext(HashEnv, null);
// 设置分页大小
ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, Control.CRITICAL)});
// 查询过滤器
String filter = "userprincipalname=*@*";
SearchControls searchControls = new SearchControls();
searchControls.setCountLimit(pageSize);
// 设置查询该树和子树的数据
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// 设置返回值
String[] s = {"usncreated", "userprincipalname"};
searchControls.setReturningAttributes(s);
byte[] cookie = null;
do {
// 查询
NamingEnumeration results = ctx.search("ou=软件开发,DC=TEST", filter, searchControls);
while (results != null && results.hasMoreElements()) {
SearchResult entry = (SearchResult) results.next();
total++;
if (currentPage == pageNo) {
// *****需要返回的页面的数据在这里操作*****
}
}
Control[] controls = ctx.getResponseControls();
if (controls != null) {
for (int i = 0; i < controls.length; i++) {
if (controls[i] instanceof PagedResultsResponseControl) {
PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
cookie = prrc.getCookie();
}
}
}
// 将cookie信息设置进去,下次查询的时候会在本次查询的基础上向后查询,如果没有cookie了,就说明没有数据了
ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, cookie, Control.CRITICAL)});
currentPage++;
} while (cookie != null);
} catch (Exception e) {
log.error("LDAP获取信息失败", e);
} finally {
if (null != ctx) {
try {
ctx.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}