用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 + ")) 3ff7 "; } else if(searchBy.equals("username")) { filter += "(samaccountname=" + searchValue + "))"; } return filter; }
Downloads
ACTIVEDIRECTORY.JAVA SAMPLEUSAGEACTIVEDIRECTORY.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
转载于:https://www.cnblogs.com/Tuzki/p/4633381.html
- 用JAVA 查询 Active Directory(AD)
- Java通过Ldap操作AD的增删改查询
- Java通过Ldap操作AD的增删改查询
- java重构学习3:以查询代替临时变量(Replace Temp with Query)
- java程序调用hive查询的一个异常
- MongoDB模糊查询java实现样例
- day_1_15 JavaWeb系列学习总结之JavaWeb实现分页查询
- Java JDBC连接数据库 查询SELECT
- 小博老师解析Java核心技术 ——JDBC普通查询操作
- java中登录查询条件为中文时,rs.next为false,导致无法登录
- java调用MongodbAPI条件查询
- Java添加、修改MS AD用户密码
- ADF工具类:JSFUtil.java 源代码
- java-mongodb分组查询
- java 模糊查询 分页(自定义标签)
- 强烈推荐几个比较好的Java代码查询网站(转)
- java对实体类列表进行方法内排序,不修改数据查询方式
- java如何获取SQL查询表格中行数和列数(3种方法)
- java项目中使用JDBC连接mysql数据库查询数据
- (一)solr 7.31版本window系统全程安装搭建,涵盖项目用到的大部分配置,常用查询,solr多条件查询、排序,配置数据库,定时同步,全量与增量更新,使用solrJ在java程序进行增删改查