Microsoft Active Directory 및 Unboundid SDK를 사용하며 29k 멤버가 많은 그룹이 있습니다.Large AD 그룹의 모든 구성원 검색
범위 값을 사용하여 모든 그룹을 얻으려고하지만 끝날 때를 결정할 수 없습니다. (작업 코드로 업데이트)
public static List<String> getAttributeRangeBasedSearch(LDAPConnection ldc, String basedn, String filter, int step, String return_attribute) throws LDAPException
{
List<String> allValues = new ArrayList<String>();
// initialize counter to total the group members and range values
int allvalues = 0;
int start = 0;
// int step = 1000;
int finish = step - 1;
boolean finallyFinished = false;
String range;
// loop through the query until we have all the results
while (!finallyFinished)
{
range = start + "-" + finish;
String currentRange = return_attribute + ";Range=" + range;
String range_returnedAtts[] = { currentRange };
SearchRequest searchRequest = new SearchRequest(basedn, SearchScope.BASE, filter, range_returnedAtts);
List<SearchResultEntry> rangedEntries = ldc.search(searchRequest).getSearchEntries();
for (Iterator<SearchResultEntry> iterator = rangedEntries.iterator(); iterator.hasNext();)
{
SearchResultEntry searchResultEntry = iterator.next();
Collection<Attribute> allAttribute = searchResultEntry.getAttributes();
for (Iterator<Attribute> attributeIterator = allAttribute.iterator(); attributeIterator.hasNext();)
{
Attribute attribute = attributeIterator.next();
log.debug("---> " + allvalues + ": " + attribute.getName());
if (attribute.getName().endsWith("*"))
{
currentRange = attribute.getName();
finallyFinished = true;
}
String[] attributeBatch = searchResultEntry.getAttributeValues(currentRange);
for (int i = 0; i < attributeBatch.length; i++)
{
allValues.add(attributeBatch[i]);
log.debug("-- " + allvalues++ + " " + attribute.getName() + ":" + attributeBatch[i]);
}
}
}// for SearchResultEntry
start = start + step;
finish = finish + step;
}// finallyFinished
return allValues;
}
어떤 아이디어 :
나는이 방법을 사용하고 있습니다?
감사합니다 - 짐
AD, 기본적으로 전용 특성 당 5000 개 항목의 최대 저장; 더 많은 속성이 여러 개의 "덩어리"(예 :'member0-4999;'member5000-9999;'등)로 나뉘어지면 전체 목록을 얻기 위해 이들을 병합 할 수 있습니까? 선택적으로, memberOf 속성에 그룹의 고유 이름이 포함 된 모든 사용자를 묻는 페이지 단위 검색을 수행 할 수 있지만 이전 방법과 비교할 때 속도가 느립니다. –
문제는 항목이 아니라이 인스턴스의 MaxValRange에 의해 결정되는 값으로 각 속성에 대해 1,500입니다. 나는 모든 결과를 얻고있다. 그러나 나는 마지막 값 집합을 구할 때 member28131과 같은 부분 크기이다 - ????? 어떤 가치에 나는 무엇을 전혀 모른다. 그렇다면 각 결과 내에서 범위의 반환 값을 어떻게 말할까요? 감사합니다 -jim – jwilleke
사실 이제는 세미콜론이 특성 이름 바로 뒤에 있다는 것을 기억합니다. 검색된 모든 특성을 반복하고 세미콜론에 이름을 분할하고 동일한 이름의 특성을 함께 병합합니다. –