JNDI 分页查询 LDAP

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值