需要: ldapbp.jar
objectCategory属性不支持*匹配
代码案例:
package com.what21.ad.page;
import java.io.IOException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.SortControl;
import com.sun.jndi.ldap.ctl.VirtualListViewControl;
import com.sun.jndi.ldap.ctl.VirtualListViewResponseControl;
import com.what21.ad.context.LDAPContextUtil;
public class UserPageList {
/**
* @param args
*/
public static void main(String[] args){
String url = "ldap://10.210.81.74:389";
String domain = "sx4a.com";
String admin = "administrator";
String passwd = "12345678";
InitialLdapContext context = null;
try {
context = LDAPContextUtil.connection(url, domain, admin, passwd);
} catch (NamingException e) {
e.printStackTrace();
}
// 基于baseDN查询
String baseDN = "dc=sx4a,dc=com";
String objectCategory = "objectCategory=cn=Person,cn=Schema,cn=Configuration," + baseDN;
String filter = "(objectClass=top)";
filter = "(&(objectClass=person)" + filter + ")";
filter = "(&(objectClass=user)" + filter + ")";
filter = "(&(objectClass=organizationalPerson)" + filter + ")";
filter = "(&("+ objectCategory +")" + filter + ")";
int pageNum = 1;
int pageSize = 10;
int total = 0;
try {
// 实例化一个搜索器
SearchControls cons = new SearchControls();
// 搜索范围: 1、平级检索;2、树形检索
cons.setSearchScope(SearchControls.SUBTREE_SCOPE);
//设置为false时返回结果占用内存减少
cons.setReturningObjFlag(true);
// 分页设置
VirtualListViewControl vctl = new VirtualListViewControl(
(pageNum - 1) * pageSize + 1, 0, 0, pageSize - 1,
Control.CRITICAL);
// 按CN排序
SortControl sctl = new SortControl("cn",
Control.CRITICAL);
context.setRequestControls(new Control[] { vctl, sctl });
// 执行查询
NamingEnumeration sEnum = context.search(baseDN, filter, cons);
int size = 0;
while(sEnum.hasMoreElements()){
SearchResult sr = sEnum.nextElement();
String DN = sr.getName();
System.out.println("DN: " + DN);
Attributes attrs = sr.getAttributes();
// 取到所有属性
NamingEnumeration extends Attribute> aEnum = attrs.getAll();
while(aEnum.hasMoreElements()){
Attribute attr = aEnum.nextElement();
if(attr==null){
continue ;
}
// 打印属性名和属性值,属性值可以为多个
System.out.print("id = " + attr.getID() + ", value = ");
for(int i=0;i
Object obj = attr.get(i);
System.out.print(obj + " ");
}
System.out.println();
}
size ++ ;
System.out.println("---------------------------------------");
}
System.out.println("共返回: " + size);
// 获取响应控件
Control[] controls = context.getResponseControls();
if (controls != null) {
for (int i = 0; i < controls.length; i++) {
if(controls[i] instanceof VirtualListViewResponseControl) {
VirtualListViewResponseControl vlvrc = (VirtualListViewResponseControl)controls[i];
total = vlvrc.getListSize() ;
}
}
}
// 清除请求控件
context.setRequestControls(null);
System.out.println("共有: " + total);
} catch (NamingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 关闭
LDAPContextUtil.close(context);
}
}