/**
* 树形结构
* 通过查询条件,查询LDAP中的所有的用户息
* @param ldapTemplate LDAP连接
* @param params 参数配置
* @return
*/
public List<Attributes> queryUsersPage(LdapTemplate ldapTemplate, Map<String, Object> params){
List<Attributes> list = new ArrayList<>();
SearchControls searchControls = new SearchControls();
/**
* 0:OBJECT_SCOPE,搜索指定的命名对象。
* 1:ONELEVEL_SCOPE,只搜索指定命名对象的一个级别,这是缺省值。
* 2:SUBTREE_SCOPE,搜索以指定命名对象为根结点的整棵树
*/
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// 每次查询条数:默认1000条
PagedResultsDirContextProcessor processor = new PagedResultsDirContextProcessor(1000);
//返回的参数
AttributesMapper CN_ATTRIBUTES_MAPPER = new AttributesMapper() {
@Override
public Attributes mapFromAttributes(Attributes attributes) throws NamingException {
return attributes;
}
};
//查询条件
LdapQuery strquerygroup = query().filter(Convert.toStr(params.get("strqueryuser")));
do {
List<Attributes> search = ldapTemplate.search(strquerygroup.base(),
strquerygroup.filter().encode(),
searchControls,
CN_ATTRIBUTES_MAPPER,
processor);
list.addAll(search);
} while(processor.hasMore());
return list;
}
使用LdapTemplate中的PagedResultsDirContextProcessor,达到分页查询的效果,每次查询1000条,直到没有返回为止。