springboot2.0集成ldap分页获取AD域中的用户信息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30698633/article/details/82825754

 1、添加maven依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-ldap</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>

2、编写分页代码 

        LdapContext ctx = null;
        Hashtable<String, String> HashEnv = new Hashtable<String, String>();
        HashEnv.put(Context.PROVIDER_URL, ldapUrl);
        // LDAP访问安全级别(none,simple,strong)
        HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");   
        //AD的用户名
        HashEnv.put(Context.SECURITY_PRINCIPAL, ldapUsername);
        //AD的密码    
        HashEnv.put(Context.SECURITY_CREDENTIALS, ldapPassword);  
        HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        //连接超时设置为3秒
        HashEnv.put("com.sun.jndi.ldap.connect.timeout", "3000"); 
        int pageSize = 15;
        int currentPage = 0;
        int total = 0;
        try {
            // 初始化连接
            ctx = new InitialLdapContext(HashEnv, null);
            // 设置分页大小
            ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, Control.CRITICAL)});
            // 查询过滤器
            String filter = "userprincipalname=*@*";
            SearchControls searchControls = new SearchControls();
            searchControls.setCountLimit(pageSize);
            // 设置查询该树和子树的数据
            searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
            // 设置返回值
            String[] s = {"usncreated", "userprincipalname"};
            searchControls.setReturningAttributes(s);
            byte[] cookie = null;
            do {
                // 查询
                NamingEnumeration results = ctx.search("ou=软件开发,DC=TEST", filter, searchControls);
                while (results != null && results.hasMoreElements()) {
                    SearchResult entry = (SearchResult) results.next();
                    total++;
                    if (currentPage == pageNo) {
                        // *****需要返回的页面的数据在这里操作*****
                                
                    }
                }
                Control[] controls = ctx.getResponseControls();
                if (controls != null) {
                    for (int i = 0; i < controls.length; i++) {
                        if (controls[i] instanceof PagedResultsResponseControl) {
                            PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
                            cookie = prrc.getCookie();
                        }
                    }
                }
                // 将cookie信息设置进去,下次查询的时候会在本次查询的基础上向后查询,如果没有cookie了,就说明没有数据了
                ctx.setRequestControls(new Control[]{new PagedResultsControl(pageSize, cookie, Control.CRITICAL)});
                currentPage++;
            } while (cookie != null);

        } catch (Exception e) {
            log.error("LDAP获取信息失败", e);
        } finally {
            if (null != ctx) {
                try {
                    ctx.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_30698633/article/details/82825754