zoukankan      html  css  js  c++  java
  • java获取域账号下的用户完整版

    package encode;

    import java.util.Hashtable;
    import javax.naming.Context;
    import javax.naming.ldap.LdapContext;
    import javax.naming.ldap.InitialLdapContext;
    import javax.naming.NamingEnumeration;
    import javax.naming.directory.SearchControls;
    import javax.naming.directory.SearchResult;
    import javax.naming.NamingException;
    import javax.naming.directory.Attribute;
    import javax.naming.directory.Attributes;
    import java.util.Enumeration;

    public class LDAPGetDomain {

     public static String getFormatOU(String ou) {
      String[] splt = ou.split(",");
      String realFormat = "";
      for (int i = splt.length - 1; i >= 0; i--) {
       realFormat = realFormat + "OU=" + splt[i] + ",";
      }
      if (',' == realFormat.charAt(realFormat.length() - 1)) {
       realFormat = realFormat.substring(0, realFormat.length() - 1);
      }
      return realFormat;
     }

     public static String getFormatDoamin(String domainName) {
      String[] splt = domainName.split("//.");
      String realFormat = "";
      for (int i = 0; i < splt.length; i++) {
       if (!"".equals(splt[i]))
        realFormat += "DC=" + splt[i] + ",";
      }
      if (',' == realFormat.charAt(realFormat.length() - 1)) {
       realFormat = realFormat.substring(0, realFormat.length() - 1);
      }
      return realFormat;
     }

     public static String GetRemoteDomainUser(LdapContext ctx, String ou,
       String domainName) throws NamingException {
      String xml = "";
      SearchControls searchCtls = new SearchControls();
      searchCtls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
      String searchFilter = "objectClass=User";
      String searchBase = "";
      searchBase = ou + "," + getFormatDoamin(domainName);
      String returnedAtts[] = { "name", "telephoneNumber", "mobile", "mail" };
      searchCtls.setReturningAttributes(returnedAtts);

      NamingEnumeration answer = ctx.search(searchBase, searchFilter,
        searchCtls);

      while (answer.hasMoreElements()) {
       SearchResult sr = (SearchResult) answer.next();
       int oulenth = 0;
       Attributes Attrs = sr.getAttributes();
       if (Attrs != null) {
        try {
         xml += "<User ";
         for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) {
          Attribute Attr = (Attribute) ne.next();

          if ("name".equals(Attr.getID())) {
           xml += "name=";
          }
          if ("telephoneNumber".equals(Attr.getID())) {
           xml += "tel=";
          }
          if ("mobile".equals(Attr.getID())) {
           xml += "mobile=";
          }
          if ("mail".equals(Attr.getID())) {
           xml += "email=";
          }
          Enumeration values = Attr.getAll();
          if (values != null) {
           while (values.hasMoreElements()) {
            xml += "/"" + values.nextElement() + "/" ";
            oulenth = oulenth + 1;
           }
          }
         }
         xml += "/>";
        } catch (NamingException e) {
         System.err.println("Throw Exception : " + e);
        }
       }
      }
      return xml;
     }

     public String GetRemoteDomainGroupDie(LdapContext ctx, String ou,
       String domainName) throws NamingException{
      String xml="";
      SearchControls searchCtls = new SearchControls();
      searchCtls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
      String searchFilter = "objectClass=organizationalUnit";
      String searchBase = "";
      searchBase =ou + "," + getFormatDoamin(domainName);
      String returnedAtts[] = { "name" };

      searchCtls.setReturningAttributes(returnedAtts);

      NamingEnumeration answer = ctx.search(searchBase, searchFilter,
        searchCtls);
      while (answer.hasMoreElements()) {
       SearchResult sr = (SearchResult) answer.next();
       String ouName = sr.getName();
       //System.out.println(ouName);
       if (ouName != null && !"".equals(ouName)) {
        
        Attributes Attrs = sr.getAttributes();
        if (Attrs != null) {
         try {
          for (NamingEnumeration ne = Attrs.getAll(); ne
            .hasMore();) {
           Attribute Attr = (Attribute) ne.next();
           if ("name".equals(Attr.getID())) {
            Enumeration values = Attr.getAll();
            if (values != null) { // 迭代
             while (values.hasMoreElements()) {
              String v=(String)values.nextElement();
              xml+="<Group name=/""+v+"/">";
              xml += GetRemoteDomainUser(ctx, "OU="+v+","+ou, domainName);
              xml+=GetRemoteDomainGroupDie(ctx,"OU="+v+","+ou,domainName);
              xml+="</Group>";
             }
            }

           }

          }
          

         } catch (NamingException e) {
          e.printStackTrace();
         }
        }
       }else{
        xml += GetRemoteDomainUser(ctx,
          getFormatOU(ou), domainName);
       }
       
      }
      return xml;
     }
     public String GetRemoteDomainGroup(String ip, String port,
       String adminName, String adminPassword, String domainName, String ou) {
      String xml = "<?xml version=/"1.0/" encoding=/"gbk/" ?>";
      Hashtable<String, String> HashEnv = new Hashtable<String, String>();
      String rport = port;
      if (port == null || "".equals(port))
       rport = "389";
      String LDAP_URL = "ldap://" + ip + ":" + rport;
      adminName = adminName + "@" + domainName;
      HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
      HashEnv.put(Context.SECURITY_PRINCIPAL, adminName);
      HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword);
      // Password
      HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
      HashEnv.put(Context.PROVIDER_URL, LDAP_URL);

      try {
       LdapContext ctx = new InitialLdapContext(HashEnv, null);
       SearchControls searchCtls = new SearchControls();
       searchCtls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
       String searchFilter = "objectClass=organizationalUnit";
       String searchBase = "";
       searchBase = getFormatOU(ou) + "," + getFormatDoamin(domainName);
       String returnedAtts[] = { "name" };

       searchCtls.setReturningAttributes(returnedAtts);

       NamingEnumeration answer = ctx.search(searchBase, searchFilter,
         searchCtls);
       int oulenth = 0;
       String[] splt = ou.split(",");
       for (int j = 0; j < splt.length; j++) {
        if (!"".equals(splt[j])) {
         xml = xml + "<Group name=/"" + splt[j] + "/">";
         oulenth = oulenth + 1;
        }
       }
       xml += GetRemoteDomainUser(ctx, getFormatOU(ou), domainName);
       xml+=GetRemoteDomainGroupDie(ctx, getFormatOU(ou), domainName);
       for (int i = 0; i < oulenth; i++) {
        xml += "</Group>";
       }
       ctx.close();
      }

      catch (NamingException e) {
       e.printStackTrace();
      }
      return xml;
     }
     public static void main(String args[]) {
      LDAPGetDomain ad = new LDAPGetDomain();
      System.out.println(ad.GetRemoteDomainGroup("192.168.2.44", "389",
        "administrator", "qqqqqqqq1!", "Test.bomb", "hongan,rtrt"));
     }
    }

    输出结果:

    <?xml version="1.0" encoding="gbk" ?><Group name="hongan"><Group name="rtrt"><User name="small" /><Group name="ggd"><Group name="343"><Group name="6677"></Group></Group></Group><Group name="gggg"><Group name="111"><Group name="ggg"></Group><Group name="iiii"></Group></Group><Group name="222"><Group name="lllk"></Group></Group></Group></Group></Group>

  • 相关阅读:
    Java Image Processing
    贝塞尔曲线开发的艺术
    Ubuntu中Hadoop环境搭建
    FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造
    Linux环境下使用VSCode编译makefile文件的注意事项
    神经记忆模型
    深度学习推荐阅读的论文
    博客园无法发布文章解决办法
    计算机各个方向名校公开课
    软件过程基础
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331524.html
Copyright © 2011-2022 走看看