LDAP查询AD信息

1 篇文章 0 订阅

更多解释信息请百度,哈哈哈哈哈哈哈

public class AdUtil
{
  private static Logger logger = Logger.getLogger(AdUtil.class);
  
  public static String uimurl = PropertiesUtil.readValue("gzhr_info", "zgc.uim.rest");
  public static String uimrestproxy = PropertiesUtil.readValue("gzhr_info", "uim.proxy.username");
  public static String proxypassword = PropertiesUtil.readValue("gzhr_info", "uim.proxy.password");
  public static String uim_ou_addn = PropertiesUtil.readValue("gzhr_info", "uim.ou.addn");
  public static String uim_ou_oucode = PropertiesUtil.readValue("gzhr_info", "uim.ou.oucode");
  public static String uim_ou_gzouid = PropertiesUtil.readValue("gzhr_info", "uim.ou.gzouid");

  
  LdapContext context = null;
  private String ldapHost;
  private int ldapVersion;
  private int ldapport;
  private int ldapScope;
  private String ldapUser;
  private String password;
  private String baseDn;

/**
 * ldapHost:IP地址
 * ldapVersion:ldap版本
 * ldapport:端口
 * ldapScope:查询域
 * ldapUser:管理员
 * password:密码
 * baseDn:根节点
 * @param adName
 */
  public void initProperties(String adName) {
    this.ldapHost = PropertiesUtil.readValue(adName, "ldapHost");
    this.ldapVersion = Integer.parseInt(PropertiesUtil.readValue(adName, "ldapVersion"));
    this.ldapport = Integer.parseInt(PropertiesUtil.readValue(adName, "ldapport"));
    this.ldapScope = Integer.parseInt(PropertiesUtil.readValue(adName, "ldapScope"));
    this.ldapUser = PropertiesUtil.readValue(adName, "ldapUser");
    this.password = PropertiesUtil.readValue(adName, "password");
    this.baseDn = PropertiesUtil.readValue(adName, "baseDn");
  }

  /**
   * 初始化链接
   * @return
   * @throws Exception
   */
  public LdapContext getcon()
    throws Exception
  {
    String AUTH_TYPE = "simple";
    String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
    Hashtable<String , String> env = new Hashtable<String , String>();
    env.put("java.naming.factory.initial", CONTEXT_FACTORY);
    env.put("java.naming.security.authentication", AUTH_TYPE);
    env.put("java.naming.provider.url", "ldap://" + this.ldapHost + ":" + this.ldapport + "/" + this.baseDn);
    env.put("java.naming.security.principal", this.ldapUser);
    env.put("java.naming.security.credentials", this.password);
    return new InitialLdapContext(env, 
      null);
  }

  /**
   * 关闭链接
   */
  public void closead()
  {
    if (this.context != null)
      try {
        this.context.close();
      } catch (NamingException e) {
        e.printStackTrace();
      }
  }
  
  
  public List<Map<String,String>> listAllUser(String type)
  {
	  List<Map<String,String>> list = new ArrayList<Map<String,String>>();
	// 域节点  OU=办公室,OU=测试集团,DC=cstest,DC=com,查询该节点以下的所有符合条件的数据
    String searchBase = "OU=安全保卫监督部,OU=测试集团";
    // LDAP搜索过滤器类  
    // cn=*name*模糊查询 cn=name 精确查询 ,String searchFilter ="(&(objectClass="+type+")("+filter+"=*"+name+"*))";  
    String searchFilter ="(objectClass="+type+")";
    try
    {
      this.context = getcon();
    // 创建搜索控制器  
      SearchControls searchCtls = new SearchControls();
    //  设置搜索范围
      searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    // 设置返回属性集 不设置则返回所有属性
     String[] returnedAtts = {"samaccountname","cn","distinguishedname","mobile","mail","department","objectclass"};
     searchCtls.setReturningAttributes(returnedAtts);
    // 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果
      NamingEnumeration entries = this.context.search(searchBase, searchFilter, searchCtls);
    // 初始化搜索结果数为0
      int totalResults = 0;
      int rows = 0;
      while(entries.hasMoreElements()){
    // 得到符合搜索条件的DN
        SearchResult entry = (SearchResult)entries.next();
        ++rows;
        String userName = entry.getName();
        System.out.println("用户:"+userName); 
     // 得到符合条件的属性集  
        Attributes at = entry.getAttributes();
        if (at != null) {
      	  Map map = new HashMap();
          for(NamingEnumeration ne = at.getAll(); ne.hasMore(); ) {
        	// 得到下一个属性
            Attribute Attr = (Attribute)ne.next();
            	 //属性名
                String attrid=Attr.getID().toString();
                System.out.print(attrid+'\t');
                // 读取属性值
                for(NamingEnumeration e = Attr.getAll(); e.hasMore(); totalResults++){
            	//属性值	objectClass有四个值top、 person、 organizationalPerson、 user,但put的时候key一样,所以value会覆盖前面的值
                	String attrvalue =e.next().toString();
                	System.out.print(attrvalue+" ");
                	map.put(attrid,attrvalue);
            	}
            	System.out.println();
            }
          list.add(map);
        }
        System.out.println("---------------");
      }
      System.out.println("************************************************");  
      System.out.println("Number: " + totalResults);  
      System.out.println("总共用户数:"+rows);  
    }catch (NamingException e){
    	e.printStackTrace();
    }catch (Exception e) {
    	e.printStackTrace();
    }finally {
    	closead();
    }
    return list;
  }

//---------------------MAIN----------------
	  
	  public static void main(String[] args) {
		    AdUtil adUtil = new AdUtil();
		    adUtil.initProperties("csad");
		    List<Map<String,String>> list= adUtil.listAllUser("organizationalPerson");
		    for(int i=0,lengths=list.size();i<lengths;i++){
		    	Map<String,String> map = list.get(i);
		    		for(Map.Entry<String,String> keyset:map.entrySet()){
		    			System.out.println("Key:"+keyset.getKey()+",Value:"+keyset.getValue());
		    		}
		    		System.out.println("-----------------------------");
		    }
	  }
	    
}
输出为:

用户:CN=唐涛
mail	tang.tao@tt.com 
mobile	13999999991 
department	安全监督部 
objectClass	top person organizationalPerson user 
sAMAccountName	tang.songtao 
distinguishedName	CN=唐涛,OU=安全保卫监督部,OU=测试集团,DC=cstest,DC=com 
cn	唐涛 
---------------
用户:CN=曾为昀
mail	zeng.weiyun@tt.com 
mobile	18664888888 
department	安全监督部 
objectClass	top person organizationalPerson user 
sAMAccountName	zeng.yun 
distinguishedName	CN=曾为昀,OU=安全保卫监督部,OU=测试集团,DC=cstest,DC=com 
cn	曾为昀


************************************************
Number: 38
总共用户数:4
Key:mail,Value:tang.tao@tt.com
Key:cn,Value:唐涛
Key:sAMAccountName,Value:tang.tao
Key:department,Value:安全监督部
Key:objectClass,Value:user
Key:distinguishedName,Value:CN=唐涛,OU=安全保卫监督部,OU=测试集团,DC=cstest,DC=com
Key:mobile,Value:139999999991
-----------------------------
Key:mail,Value:zeng.yun@tt.com
Key:cn,Value:曾为昀
Key:sAMAccountName,Value:zeng.weiyun
Key:department,Value:安全监督部
Key:objectClass,Value:user
Key:distinguishedName,Value:CN=曾为昀,OU=安全保卫监督部,OU=测试集团,DC=cstest,DC=com
Key:mobile,Value:18664888888






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值