Java 读取 AD 用户
2016-04-04 19:06
399 查看
Java代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
/**
* LDAP 连接
*/
public class LDAPConnection {
private String baseDN;
private String filter;
private String[] attributes;
private Hashtable<String, String> env = null;
private static LDAPConnection lc;
private LDAPConnection() {
//搜索根节点
baseDN = "******";
//要查询的属性列
attributes = new String[]{"cn"};
//过滤条件
if ((filter == null) || (filter == ""))
filter = "objectclass=*";
}
public static LDAPConnection getInstance() {
if (lc == null) {
lc = new LDAPConnection();
}
return lc;
}
/**
* 建立LDAP连接
* @return boolean
*/
private LdapContext getLdapContext() {
env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://*****:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, "123456");
env.put(Context.SECURITY_PRINCIPAL, "****");
try {
return new InitialLdapContext(env, null);
} catch (Exception e) {
System.out.println("连接服务器失败!");
e.printStackTrace();
}
return null;
}
/**
* 获取用户信息
* @return List<Map>
*/
public List<Map> getUsers() {
LdapContext ctx = getLdapContext();
if(ctx == null){
return null;
}
List<Map> list = new ArrayList<Map>();
try {
SearchControls constraints = new SearchControls();
constraints.setReturningAttributes(attributes);
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<?> en = ctx.search(baseDN, filter, constraints);
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
Attributes attrs = si.getAttributes();
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < attributes.length; i++) {
String attributeName = attributes[i];
if(attrs.get(attributeName) == null){
map.put(attributeName, attrs.get(attributeName));
}else{
map.put(attributeName, attrs.get(attributeName).get());
}
}
System.out.println(map);
list.add(map);
} else {
System.out.println(obj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("总符合条件记录数:"+list.size());
return list;
}
public static void main(String arg[]) {
LDAPConnection.getInstance().getUsers();
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
/**
* LDAP 连接
*/
public class LDAPConnection {
private String baseDN;
private String filter;
private String[] attributes;
private Hashtable<String, String> env = null;
private static LDAPConnection lc;
private LDAPConnection() {
//搜索根节点
baseDN = "******";
//要查询的属性列
attributes = new String[]{"cn"};
//过滤条件
if ((filter == null) || (filter == ""))
filter = "objectclass=*";
}
public static LDAPConnection getInstance() {
if (lc == null) {
lc = new LDAPConnection();
}
return lc;
}
/**
* 建立LDAP连接
* @return boolean
*/
private LdapContext getLdapContext() {
env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://*****:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, "123456");
env.put(Context.SECURITY_PRINCIPAL, "****");
try {
return new InitialLdapContext(env, null);
} catch (Exception e) {
System.out.println("连接服务器失败!");
e.printStackTrace();
}
return null;
}
/**
* 获取用户信息
* @return List<Map>
*/
public List<Map> getUsers() {
LdapContext ctx = getLdapContext();
if(ctx == null){
return null;
}
List<Map> list = new ArrayList<Map>();
try {
SearchControls constraints = new SearchControls();
constraints.setReturningAttributes(attributes);
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<?> en = ctx.search(baseDN, filter, constraints);
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
Attributes attrs = si.getAttributes();
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 0; i < attributes.length; i++) {
String attributeName = attributes[i];
if(attrs.get(attributeName) == null){
map.put(attributeName, attrs.get(attributeName));
}else{
map.put(attributeName, attrs.get(attributeName).get());
}
}
System.out.println(map);
list.add(map);
} else {
System.out.println(obj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("总符合条件记录数:"+list.size());
return list;
}
public static void main(String arg[]) {
LDAPConnection.getInstance().getUsers();
}
}
相关文章推荐
- java核心基础文章精选
- spring和mybatise的整合
- Eclipse上安装springsource-tool-suite
- 重读《Java编程思想(第四版)》(1-9章)
- Java基础-多线程-③线程同步之synchronized
- Java基础-多线程-②多线程安全问题
- java bridge method
- Java基础-多线程-①线程的创建和启动
- 学Java必看:Java最常用方法总结(ImportNew年度好文)
- java实现菱形输出
- Java Servlet API中文说明文档
- Spring+SpringMVC+Hibernate+JPA+SpringData+Ehcache+C3p0+MySQL项目搭建
- 蛇形矩阵 Java实现
- struts2笔记06-ServletXxxAware接口
- spring事务管理全面分析
- java 中的访问修饰符权限等级
- struts2笔记05-ServletActionContext
- 九九乘法表
- java中关于json传图片的方法
- java堆内存的划分