用JAVA 查询 Active Directory(AD)
Required Details
- LDAP address (For e.g.: myjeeva.com or IP of the Domain Controller/Global Catalog[GC])
- Port # (For e.g.: 3289 or 389) where would you to like search user details?
- Domain Username
- Domain Password
Important Reference: will introduce you to the classes needed for querying Active Directory using Java. Have a look and know more about it.
- javax.naming.Context
- javax.naming.directory.InitialDirContext
- javax.naming.directory.DirContext
- javax.naming.directory.SearchControls
- javax.naming.directory.SearchResult
How to do – Step by Step explaination
For an easy understanding perspective; I will be following line by line approach. ActiveDirectory Class file and example of how to use that ActiveDirectory class file in javaprogram. Downloads of these files you will find below.
Step 1
Compose LDAP address and supply following parameters username, password, ldap address as a domain into ActiveDirectory constructor.
ActiveDirectory activeDirectory = new ActiveDirectory(username, password,
domain);
Step 2
Invoke searchUser method with parameters of searchTerm, choice and searchBase.
NamingEnumeration<SearchResult> result =
activeDirectory.searchUser(searchTerm, choice, “DC=myjeeva,DC=com”);
Step 3
Now you have your search result in result variable.
How it works?
Part 1
ActiveDirectory constructor-
- It creates properties instance with given values (ldap address, username, password)
- It initializes the Directory Context
- It assign the Search Scope and return attribute names
/**
* constructor with parameter for initializing a LDAP context
*
* @param username a {@link java.lang.String} object - username to establish a LDAP connection
* @param password a {@link java.lang.String} object - password to establish a LDAP connection
* @param domainController a {@link java.lang.String} object - domain controller name for LDAP connection
*/
public ActiveDirectory(String username, String password, String domainController) {
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
properties.put(Context.PROVIDER_URL, "LDAP://" + domainController);
properties.put(Context.SECURITY_PRINCIPAL, username + "@" + domainController);
properties.put(Context.SECURITY_CREDENTIALS, password);
// initializing active directory LDAP connection
try {
dirContext = new InitialDirContext(properties);
} catch (NamingException e) {
LOG.severe(e.getMessage());
}
// default domain base for search
domainBase = getDomainBase(domainController);
// initializing search controls
searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
searchCtls.setReturningAttributes(returnAttributes);
}
Part 2
searchUser method utilizes the filter method to construct the active directory query.
/**
* search the Active directory by username/email id for given search base
*
* @param searchValue a {@link java.lang.String} object - search value used for AD search for eg. username or email
* @param searchBy a {@link java.lang.String} object - scope of search by username or by email id
* @param searchBase a {@link java.lang.String} object - search base value for scope tree for eg. DC=myjeeva,DC=com
* @return search result a {@link javax.naming.NamingEnumeration} object - active directory search result
* @throws NamingException
*/
public NamingEnumeration<SearchResult> searchUser(String searchValue,
String searchBy, String searchBase) throws NamingException {
String filter = getFilter(searchValue, searchBy);
// For eg.: "DC=myjeeva,DC=com";
String base = (null == searchBase) ? domainBase : getDomainBase(searchBase);
return this.dirContext.search(base, filter, this.searchCtls);
}
private String getFilter(String searchValue, String searchBy) {
String filter = this.baseFilter;
if(searchBy.equals("email")) {
filter += "(mail=" + searchValue + "))";
} else if(searchBy.equals("username")) {
filter += "(samaccountname=" + searchValue + "))";
}
return filter;
}
Downloads
ACTIVEDIRECTORY.JAVASAMPLEUSAGEACTIVEDIRECTORY.JAVA
Completion
That’s it, you have learned querying active directory using java and you can download artifacts. Try it out yourself with class provided and experiment it.
For any queries please leave a comment!
原文: http://myjeeva.com/querying-active-directory-using-java.html
相关链接:
1. How To Authenticate Users With Active Directory
2. AzureAD/azure-activedirectory-library-for-java
4. A complete Java example complete with LDAP query code ...
5. Using JAVA code with Active Directory – JefTek.com
用JAVA 查询 Active Directory(AD)的更多相关文章
- How to setup Active Directory (AD) In Windows Server 2016
Windows Server 2016 is the newest server operating system released by Microsoft in October 12th, 201 ...
- C#操作Active Directory(AD)详解
1. LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门 ...
- datazen Active Directory AD 配置
今天苦心经营的datazen 链接AD,文档已经无法吐槽了简单的几句话,根本不够用. 先说一下链接AD 的好处吧, 1 首先免去设置密码的麻烦,因为直接用AD账号的密码. 2 更安全,因为客户可不想自 ...
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
示例准备 打开上一篇文章配置好的AD域控制器 开始菜单-->管理工具-->Active Directory 用户和计算机 新建组织单位和用户 新建层次关系如下: 知识了解 我们要用C# ...
- TFS 与活动目录AD(Active Directory)的同步机制
TFS用户管理机制 TFS系统与企业域服务器用户系统(或本地计算机用户系统)高度集成在一起,使用域服务器验证系统用户的账户和密码,从而在企业中实现单一用户,单点登录.也就是说,TFS系统自身并没有用户 ...
- AD域的安装(在Windows Server 2003中安装Active Directory)
在Active Directory中提供了一组服务器作为身份验证服务器或登录服务器,这类服务器被称作域控制器(Domain Controller,简称DC).建立一个AD域的过程实际就是在一台运行Wi ...
- Windows Azure Active Directory (2) Windows Azure AD基础
<Windows Azure Platform 系列文章目录> Windows Azure AD (WAAD)是Windows Azure提供的一个REST风格的服务,为您的云服务提供了身 ...
- Windows Azure Active Directory (3) China Azure AD增加新用户
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的China Azure. 本文是对笔者之前的文档:Windows Azure Active ...
- Windows Azure Active Directory (4) China Azure AD Self Password Reset
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 在开始本章内容之前,请读者熟悉笔者之前写的文档: Windows ...
随机推荐
- ACM——圆柱体的表面积
lems 1092 圆柱体的表面积 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:2697 测试通过:414 ...
- 不允许对索引显式地使用 DROP INDEX,该索引正用于 UNIQUE KEY
[转载]http://blog.csdn.net/w87875251l/article/details/7929657 不允许对索引显式地使用 DROP INDEX,该索引正用于 UNIQUE KEY ...
- 09_Mybatis开发Dao方法——mapper代理开发规范
一.开发规范 需要编写mapper.xml映射文件(本项目为userMapper.xml,类似于前面的user.xml). 编写mapper接口需要遵循一些开发规范,这样MyBatis可以自动生成ma ...
- 暑假集训(1)第三弹 -----Dungeon Master(Poj2251)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- 桥接模式(Bridge Pattern)
桥接模式,用于将抽象化与实现化解偶,使得二者可以独立变化. 举一个数据库JDBC的例子: 定义一个Driver接口,不同的数据库实现的接口,如MySQL,SQLServer public interf ...
- 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别
之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...
- OpenCV2学习笔记01:Linux下OpenCV开发环境的搭建
个人已经厌倦了Windows下的开发方式,于是决定转到Linux平台上来,当然我也知道这个转变会很艰辛,但是我还是要坚持.所以,后面的所有开发我都会基于Linux和Qt,先从开发环境的搭建开始做起,当 ...
- think ajax 应用
首先得引入 jquery 文件,另外定义一个处理的 js.js 文件 如实现用 post 传输方法: 模板文件: <script type="text/javascript" ...
- crontab与环境变量
一个shell脚本,直接执行能成功,但是加在crontab后确怎么也执行不成功. 问题的原因是:crontab的环境变量与直接执行用户的环境变量不一样. export PATH=$PATH:/sbin ...
- art.dialog 与 ajax 异步请求
上周写了一些代码,涉及到jquery异步请求,这里归纳总结下,希望对刚接触编程的同学有帮助. 主要习惯使用 art.dialog 框架,非常好用,在异步请求上,它提供了很多简便的方法. 加载使用art ...