2013-08-14 1 views
0

LDAP AD의 그룹에서 구성원을 얻으려고하면 몇 가지 문제가 있습니다.LDAP AD paging with

1) 나는 1000의 페이지 크기를 필요로하지만, 1500 명 멤버를 반환 (myside에서 어떤 문제가 있습니까 또는) ?? 관리자를 요청해야

2) 쿠키 값은 항상 null로, 나는 확실하지 않다 없어진 물건 있어요. 쿠키가 null로 resultpagesize는이 문제가 건너 온이

Hashtable<String, Object> env = new Hashtable<String, Object>(); 
LdapContext ctx; 
byte[] cookie = null; 
try { 
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://localhost"); 
env.put(Context.SECURITY_PRINCIPAL,"cn=testaccount"); 
env.put(Context.SECURITY_CREDENTIALS, "passwd"); 
env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
ctx = new InitialLdapContext(env, null); 
SearchControls searchCtls = new SearchControls(); 
String returnedAtts[]={"member"}; 
searchCtls.setSearchScope(2); 
searchCtls.setReturningAttributes(returnedAtts); 
ctx.setRequestControls(new Control[] { new PagedResultsControl(1000, false) }); 
do { 
    NamingEnumeration answer = ctx.search("", "(&(objectClass=group)(cn=testgroup))", searchCtls); 
    while (answer.hasMore()) { 
     SearchResult entry = (SearchResult) answer.next(); 
      String attrsValaues = entry.getAttributes().toString(); 
      System.out.println(attrsValaues); 
     } 
     Control[] controls = ctx.getResponseControls(); 
     if (controls != null) { 
      for (int i = 0; i < controls.length; i++) { 
       System.out.println(controls[i]); 
       if (controls[i] instanceof PagedResultsResponseControl) { 
        PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i]; 
        cookie = prrc.getCookie(); 
       } 
      } 
     } 
     ctx.setRequestControls(new Control[] { new PagedResultsControl(1000, cookie, false) }); 
    } while(cookie!=null); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+1

를 사용하지 않고 사용자를 가져올 수있는 방법을 찾아 해결하는 경우

이 제발 도와주세요 null의 경우 Spring LDAP 1.3.2 이상에 포함되어 있습니다. 자세한 내용은 http://docs.spring.io/spring-ldap/docs/1.3.2.RELEASE/apidocs/org/springframework/ldap/core/support/DefaultIncrementalAttributesMapper.html – marthursson

+0

페이징은 검색 결과를 참조하십시오. 범위를 사용하여 큰 속성 목록을 가져 오는 것은 페이징이 아닙니다. 질질 마냥하지 말고, 답을 찾아야한다는 것을 알고 있습니다. – ixe013

+0

yaa 나는 ixe013에 동의합니다 ... 나는 spring-ldap-1.3.1을 사용하고 있으며 업그레이드 할 수 없습니다. 그래서 아래에 나온 결과를 얻기 위해 다른 방법을 사용합니다. – MohanSee

답변

2

내가 범위 지원은 쿠키

boolean endString = true; 
int loopValue = 0; 
while (endString) { 
    int startValue = loopValue * 1000; 
    int endvalue = (loopValue + 1) * 1000; 
    SearchControls searchCtls = new SearchControls(); 
    String[] returnedAttrs = new String[1]; 
    String range = startValue + "-" + endvalue; 
    returnedAttrs[0] = "member;range=" + range; 
    searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    searchCtls.setReturningAttributes(returnedAttrs); 
    NamingEnumeration answer = ctx.search("", "(&(objectClass=group)(cn=testgroup))", searchCtls); 
    while (answer.hasMore()) { 
     SearchResult entry = (SearchResult) answer.next(); 
     System.out.println(entry.getAttributes()); 
     if (entry.getAttributes().toString().contains("{member;range=" + startValue + "-*")) { 
      endString = false; 
     } 
    } 
    loopValue++; 
}