Java使用LdAP获取AD域用户


随着我们的习大大上台后,国家在网络信息安全方面就有了非常明显的改变!所以如今好多做网络信息安全产品的公司和须要网络信息安全的公司都会提到用AD域server来验证,这里就简单的研究了一下!

先简单的讲讲AD域和LdAP文件夹訪问协议:AD(active directory)活动文件夹,动态的建立整个域模式网络中的对象的数据库或索引,协议为LDAP,安装了AD的server称为DC域控制器,存储整个域的对象的信息并周期性更新!当中的对象分为三大类——资源(如印表机)、服务(如电子邮件)、和人物(即帐户或用户,以及组)。 

LDAP是一个用来公布文件夹信息到很多不同资源的协议。通常它都作为一个集中的地址被使用,只是依据组织者的须要,它能够做得更加强大。
LDAP事实上是一个电话簿,类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络文件夹,也类似于你在花园中所示树木。
不少LDAP开发者喜欢把LDAP与关系数据库相比,觉得是还有一种的存贮方式,然后在读性能上进行比較。实际上,这样的对照的基础是错误的。LDAP和关系数据库是两种不同层次的概念,后者是存贮方式(同一层次如网络数据库,对象数据库),前者是存贮模式和訪问协议。LDAP是一个比关系数据库抽象层次更高的存贮概念,与关系数据库的查询语言SQL属同一级别。LDAP最主要的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它能够非常快地得到查询结果,只是在其他方面,比如更新,就慢得多。AD域和LdAP文件夹訪问协议就介绍到这里!以下来看看简单的demo吧!

/**
 * @Description: 
 *
 * @Title: LdAPTest.java
 * @Package com.joyce.itext.main
 * @Copyright: Copyright (c) 2014
 *
 * @author Comsys-LZP
 * @date 2014-8-7 上午10:20:22
 * @version V2.0
 */
package com.joyce.itext.main;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

/**
 * @Description:拉取AD域账户
 * 
 * @ClassName: LdAPTest
 * @Copyright: Copyright (c) 2014
 * 
 * @author Comsys-LZP
 * @date 2014-8-7 上午10:20:22
 * @version V2.0
 */
public class LdAPTest {
	public static void main(String[] args) {
		Properties env = new Properties();
		String adminName = "administrator@2003.com";//username@domain
		String adminPassword = "admin";//password
		String ldapURL = "LDAP://10.10.2.153:389";//ip:port
		env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
		env.put(Context.SECURITY_AUTHENTICATION, "simple");//"none","simple","strong"
		env.put(Context.SECURITY_PRINCIPAL, adminName);
		env.put(Context.SECURITY_CREDENTIALS, adminPassword);
		env.put(Context.PROVIDER_URL, ldapURL);
		try {
			LdapContext ctx = new InitialLdapContext(env, null);
			SearchControls searchCtls = new SearchControls();
			searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
			String searchFilter = "(&(objectCategory=person)(objectClass=user)(name=*))";
			String searchBase = "DC=2003,DC=com";
			String returnedAtts[] = {"memberOf"};
			searchCtls.setReturningAttributes(returnedAtts);
			NamingEnumeration<SearchResult> answer = ctx.search(searchBase, searchFilter,searchCtls);
			while (answer.hasMoreElements()) {
				SearchResult sr = (SearchResult) answer.next();
				System.out.println("<<<::[" + sr.getName()+"]::>>>>");
			}
			ctx.close();
		}catch (NamingException e) {
			e.printStackTrace();
			System.err.println("Problem searching directory: " + e);
		}
	}
}

以上就是从AD域上拉取域账号!当然如今Java还有更多的jar也能操作AD域,这里不就不多介绍了,有兴趣的同伴能够去百度、谷歌!最后给大伙儿看看效果图:

还想多说一句,事实上Java原生态的API老好了,所以能用原生态的最好,由于别人提供的jar包假设没有处理好的话,还不如原生态的呢!感谢大家的关注


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM