全文: http://blog.163.com/lyq_163_2009/blog/static/13408269620128711347298/
package com.nice.ldap;
import javax.naming.NamingEnumeration;
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;
public class LDAPDao {
private InitialLdapContext context;
public Object execute(JNDIHelper helper) {
Object obj = helper.doInContext(this.context);
return obj;
}
public void searchOne(final int pageNum,final int pageSize,final String baseDN,
final String filter){
this.execute(new JNDIHelper(){
public Object doInContext(InitialLdapContext context) {
SearchControls constraints = new SearchControls();
// SearchControls.ONELEVEL_SCOPE (子目录)
// SearchControls.SUBTREE_SCOPE (子树目录)
constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);
constraints.setCountLimit(0);
constraints.setTimeLimit(5000);
constraints.setDerefLinkFlag(false);
String[] attrIDs = { "cn", "sn", "objectClass" };
constraints.setReturningAttributes(attrIDs);
try {
VirtualListViewControl vctl = new VirtualListViewControl(
(pageNum-1)*pageSize+1, 0, 0,pageSize-1, Control.CRITICAL);
SortControl sctl = new SortControl(
new String[] { "cn" },Control.CRITICAL);
context.setRequestControls(new Control[] { sctl, vctl });
NamingEnumeration<SearchResult> results = context.search(
baseDN, filter, constraints);
int total = 0;
while (results != null && results.hasMore()) {
total++;
SearchResult result = results.nextElement();
String value = result.getName();
System.out.print(total + " 节点DN: " + value);
Attributes attrs = result.getAttributes();
Attribute ocAttr= attrs.get("objectClass");
for(int i=0;ocAttr!=null && i<ocAttr.size();i++){
System.out.print(" " + ocAttr.get(i));
}
Attribute snAttr= attrs.get("sn");
System.out.println(" sn = " + snAttr.get());
}
System.out.println("查询条数:" + total);
}catch(Exception e){
e.printStackTrace();
}
return null;
}
});
}
public void setContext(InitialLdapContext context) {
this.context = context;
}
}