在AD中有7563名员工。我需要使用(employeeId = *)来全部挑选
以下是我的Java代码:
Hashtable<String, String> ldapEnv = new Hashtable<>();
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, PROVIDER_URL);
ldapEnv.put("com.sun.jndi.Ldap.connect.timeout", CONNECTION_TIMEOUT); // specify timeout out to be 5 seconds
ldapEnv.put(Context.SECURITY_AUTHENTICATION, AUTHENTICATION_TYPE);
ldapEnv.put(Context.SECURITY_PRINCIPAL, AD_USER);
ldapEnv.put(Context.SECURITY_CREDENTIALS, AD_PASS);
DirContext context = new InitialDirContext(ldapEnv); // initial context created
System.out.println("(employeeID=" + aDemployeeID + ")");
String searchFilter = "(employeeID=*)";
SearchControls controls = new SearchControls();
String[] requiredAttribute = { "mail", "Targetaddress", "UserPrincipalName" };
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(requiredAttribute);
controls.setCountLimit(1200);
NamingEnumeration<SearchResult> users1 = context.search(SEARCH_DIRECTORY_1, searchFilter, controls);
adAttributesToEVRYIntegrator = new HashMap<>();
int count = 0;
while (users1.hasMore()) {
SearchResult sr = users1.next();
NamingEnumeration<? extends Attribute> aDattributes = sr.getAttributes().getAll();
count = count + 1;
while (aDattributes.hasMore()) {
Attribute requestedAttributesFromAD = aDattributes.next();
System.out.println(requestedAttributesFromAD.get().toString());
System.out.println(count);
}
输出:
After 1000 Records:
javax.naming.SizeLimitExceededException: [LDAP: error code 4 - Sizelimit Exceeded]; remaining name 'OU=Users,OU=Sweden,OU=CCD,OU=Customers,DC=corp,DC=corpcommon,DC=com'
我检查了多个文件夹,发现:
谁能建议如何从LDAP获取所有记录
PS:我已经对相关帖子进行了所有更改,但无法解决问题。
答案 0 :(得分:1)
您需要使用PagedResultsControl
。您将必须更改context
的声明,使其为LdapContext
,并且可以在PagedResultsControl
的构造函数中传递InitialLdapContext
:
int pageSize = 1000;
LdapContext context = new InitialLdapContext(ldapEnv, new Control[] {
new PagedResultsControl(pageSize, Control.CRITICAL) });
pageSize
可以是任何<= 1000。
答案 1 :(得分:1)
您似乎遇到了Microsoft Active Directory MaxPageSize设置,该设置控制单个搜索结果中返回的最大对象数。
您不能从客户端更改MaxPageSize。
Microsoft的建议是使用可以使用的简单页面结果控件。
我确实注意到您有
controls.setCountLimit(1200);
设置客户机上作为结果返回的最大条目数。