zoukankan      html  css  js  c++  java
  • java读取AD域信息

    package com.eh.ad;

    /**
     *  JAVA 读取AD用户信息
     *  aa00a00
     */

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;


    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.Attributes;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.ldap.Control;
    import javax.naming.ldap.InitialLdapContext;
    import javax.naming.ldap.LdapContext;
    import javax.naming.ldap.PagedResultsControl;
    import javax.naming.ldap.PagedResultsResponseControl;

    public class EhrADOperTest {


     public List<EhrPo> GetADInfo(String userName, String passwd, String host,
       String port, String domain) throws IOException {
      List<EhrPo> ehrList = new ArrayList();// 返回的list

      String url = new String("ldap://" + host + ":" + port);
      String user = userName.indexOf(domain) > 0 ? userName : userName
        + domain;
      Hashtable HashEnv = new Hashtable();

      HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
      HashEnv.put(Context.SECURITY_PRINCIPAL, userName); // AD User
      HashEnv.put(Context.SECURITY_CREDENTIALS, passwd); // AD// Password
      HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
      HashEnv.put(Context.PROVIDER_URL, url);
      HashEnv.put(Context.BATCHSIZE, "4100");
      
      try {
       LdapContext ctx = new InitialLdapContext(HashEnv, null);

       ctx.setRequestControls(new Control[] { new PagedResultsControl(
         5000, Control.CRITICAL) });

       // 域节点
       String searchBase = "DC=genomics,DC=cn";
       // LDAP搜索过滤器类
       String searchFilter = "(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";
       // String searchFilter = "objectClass=User";
       // 搜索控制器
       SearchControls searchCtls = new SearchControls(); // Create the
       searchCtls.setCountLimit(4110);
       // search
       // controls
       // 创建搜索控制器
       searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify

       System.out.println(searchCtls.getCountLimit());
      
       // 设置搜索范围
       // searchCtls.setSearchScope(SearchControls.OBJECT_SCOPE); //
       
       String returnedAtts[] = { "Pwd-Last-Set", "User-Password", "mail",
         "description" };// 定制返回属性

       searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集

       ehrList = ldapDatalistPage(ctx, searchBase,searchFilter);  
       
       ctx.close();
      } catch (NamingException e) {
       e.printStackTrace();
       System.err.println("Throw Exception : " + e);
      }

      return ehrList;
     }

     public List ldapDatalistPage(LdapContext context, String base,
       String objectClass) {
      
      List resultlist = new ArrayList();
      int pageSize = 5000; // 1000 entries per page
      byte[] cookie = null;
      int total;
      
      try {
       context.setRequestControls(new Control[] { new PagedResultsControl(
         pageSize, Control.CRITICAL) });// 分页读取控制
       do {// 循环检索数据
        
        // Perform the search
        SearchControls searchCtls = new SearchControls(); // Create the

        // 创建搜索控制器
        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify
        
        String returnedAtts[] = { "Pwd-Last-Set", "User-Password", "mail",
          "description" };// 定制返回属性

        searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集

        NamingEnumeration results = context.search(base,objectClass, searchCtls); // 查询所有信息
        
        while (results != null && results.hasMoreElements()) {// 遍历结果集
         SearchResult sr = (SearchResult) results.next();// 得到符合搜索条件的DN

         EhrPo ehr = new EhrPo(); // 接收属性值的对象;

         int count=0;
         
         Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集
         if (Attrs != null) {
          try {
           for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) {
            
            Attribute Attr = (Attribute) ne.next();// 得到下一个属性

            // 读取属性值
            for (NamingEnumeration e = Attr.getAll(); e
              .hasMore(); count++) {

             if ("mail".equals(Attr.getID().toString())&&Attr.getID()!=null) {
              ehr.setUseremail(e.next().toString());
             }
             
             if ("description".equals(Attr.getID().toString())&&Attr.getID()!=null) {          
              ehr.setUsercode(e.next().toString().toUpperCase());
             }
            }
           }
          } catch (NamingException e) {
           e.printStackTrace();
          }
         }

         if (ehr.getUsercode() != null && ehr.getUseremail() != null) {
          resultlist.add(ehr);
         }
        }

        // Examine the paged results control response
        Control[] controls = context.getResponseControls();
        if (controls != null) {
         for (int i = 0; i < controls.length; i++) {
          if (controls[i] instanceof PagedResultsResponseControl) {
           PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
           total = prrc.getResultSize();
           cookie = prrc.getCookie();
          }
         }
        }
        // Re-activate paged results
        context.setRequestControls(new Control[] { new PagedResultsControl(
          pageSize, cookie, Control.CRITICAL) });
       } while (cookie != null);
       
      } catch (NamingException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
      System.out.println("总共:" + resultlist.size() + "条信息.");
      return resultlist;
     }

     public static void main(String[] args) throws IOException {
      EhrADOperTest test = new EhrADOperTest();

      // String userName = "P_ehr"; // 用户名称
      // String passwd = "@HNT78901";
      // String host = "192.168.16.1"; // AD服务器
      // String port = "389"; // 端口
      // String domain = "@genomics.cn"; // 邮箱的后缀名

      List<EhrPo> list = test.GetADInfo("P_ehr", "@HNT78901", "192.168.16.1",
        "389", "@genomics.cn");

      for (EhrPo ehr : list) {
       System.out.println(ehr.getUsercode() + "   " + ehr.getUseremail());
      }
      System.out.println(list.size());
     }
    }

  • 相关阅读:
    响应式布局
    bootstrap--前端开发框架
    ADO.NET Entity Framework
    dns
    自动完成脚本
    一个Banner广告收缩效果
    对联广告2
    蓝色经典的对联广告代码
    Js弹性漂浮广告代码
    jquery悬停tab2
  • 原文地址:https://www.cnblogs.com/javawebstudy/p/AD.html
Copyright © 2011-2022 走看看