向AD查询无限结果

时间:2015-06-01 07:32:39

标签: java active-directory

我正在使用下一个代码来获取AD中的所有用户

Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://grupoasisa.local:636");
    env.put(Context.SECURITY_PROTOCOL, "ssl");
    env.put(Context.SECURITY_PRINCIPAL, "DOMASISA\\"+USER_SERVICE);
    env.put(Context.SECURITY_CREDENTIALS, PASSWORD_SERVICE);

    try {
        DirContext ctx = new InitialLdapContext(env, null);

        SearchControls searchCtls = new SearchControls();

        String returnedAtts[]={"sAMAccountName", "description", "mail"};

        searchCtls.setReturningAttributes(returnedAtts);

        //Specify the search scope
        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        searchCtls.setTimeLimit(0);
        searchCtls.setCountLimit(0);

        //Specify the LDAP search filter
        String searchFilter="(&(objectCategory=person)(objectClass=user))";
        //Specify the Base for the search
        String searchBase = "DC=grupoasisa,DC=local";

        // Search for objects using the filter
        NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter, searchCtls);

        //Loop through the search results
        while (answer.hasMoreElements()) {
            SearchResult searchResult = answer.next();
            Attributes attrs = searchResult.getAttributes();
            Attribute usuWin = attrs.get("sAMAccountName");
            Attribute racf = attrs.get("description");
            Attribute email = attrs.get("mail");    
        }
} catch (NamingException e) {
        System.err.println("Error: "+e.getMessage());
    } catch (Exception e) {
        System.err.println("Error: "+e.getMessage());
    }

虽然我指的是搜索无限制,但我只收到了1000条第一条记录。怎么了?

提前致谢。

1 个答案:

答案 0 :(得分:1)

不可能,你必须通过结果分页(PaginationControl)。试试this回答。