JNDI 分页查询 LDAP

来源:互联网 发布:支付宝绑定淘宝 编辑:程序博客网 时间:2024/05/22 06:57

全文: 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;
    }
 
}

原创粉丝点击