ldap java ad 域 分页_Java操作AD域控制器 分页查询用户信息

本文展示了如何使用Java通过LDAP连接到AD域控制器,并进行分页查询用户信息。通过设置VirtualListViewControl和SortControl实现了分页和排序功能,代码中详细解释了查询过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要: 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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值