/**
* JAVA 读取AD用户信息
* aa00a00
*/
package com.wanda.sso.client.servlet;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
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;
public class ADOperTest {
public ADOperTest() {
}
public void GetADInfo() {
String userName = "xueqiang"; // 用户名称
String passwd = "123456";
String host = "10.0.4.26"; // AD服务器
String port = "389"; // 端口
String domain = "@wanda-dev.cn"; // 邮箱的后缀名
String url = new String("ldap://" + host + ":" + port);
String user = userName.indexOf(domain) > 0 ? userName : userName
+ domain;
Hashtable HashEnv = new Hashtable();
// String adminName ="CN=oyxiaoyuanxy,CN=Users,DC=Hebmc,DC=com";//AD的用户名
String adminName = "xueqiang"; // 注意用户名的写法:domain\User 或
// User@domain.com
adminName = "xueqiang"; // 注意用户名的写法:domain\User 或 User@domain.com
String adminPassword = "123456"; // 密码
HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User
HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password
HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
HashEnv.put(Context.PROVIDER_URL, url);
try {
LdapContext ctx = new InitialLdapContext(HashEnv, null);
// 域节点
String searchBase = "DC=wanda-dev,DC=cn";
// LDAP搜索过滤器类
String searchFilter = "objectClass=User";
// 搜索控制器
SearchControls searchCtls = new SearchControls(); // Create the
// search
// controls
// 创建搜索控制器
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify
// the
// search
// scope
// 设置搜索范围
// searchCtls.setSearchScope(SearchControls.OBJECT_SCOPE); //
// Specify the search scope 设置搜索范围
String returnedAtts[] = { "memberOf", "distinguishedName",
"Pwd-Last-Set", "User-Password", "cn" };// 定制返回属性
// String returnedAtts[] = { "url", "whenChanged", "employeeID",
// "name", "userPrincipalName", "physicalDeliveryOfficeName",
// "departmentNumber", "telephoneNumber", "homePhone",
// "mobile", "department", "sAMAccountName", "whenChanged",
// "mail" }; // 定制返回属性
searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集
// 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果
NamingEnumeration answer = ctx.search(searchBase, searchFilter,
searchCtls);// Search for objects using the filter
// 初始化搜索结果数为0
int totalResults = 0;// Specify the attributes to return
int rows = 0;
while (answer.hasMoreElements()) {// 遍历结果集
SearchResult sr = (SearchResult) answer.next();// 得到符合搜索条件的DN
System.out.println(++rows
+ "************************************************");
System.out.println(sr.getName());
Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集
if (Attrs != null) {
try {
for (NamingEnumeration ne = Attrs.getAll(); ne
.hasMore();) {
Attribute Attr = (Attribute) ne.next();// 得到下一个属性
System.out.println(" AttributeID=属性名:"
+ Attr.getID().toString());
// 读取属性值
for (NamingEnumeration e = Attr.getAll(); e
.hasMore(); totalResults++) {
System.out.println(" AttributeValues=属性值:"
+ e.next().toString());
}
System.out.println(" ---------------");
// 读取属性值
// Enumeration values = Attr.getAll();
// if (values != null) { // 迭代
// while (values.hasMoreElements()) {
// System.out.println(" AttributeValues=属性值:"+
// values.nextElement());
// }
// }
// System.out.println(" ---------------");
}
} catch (NamingException e) {
System.err.println("Throw Exception : " + e);
}
}
}
System.out
.println("************************************************");
System.out.println("Number: " + totalResults);
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
System.err.println("Throw Exception : " + e);
}
}
public static void main(String args[]) {
// 实例化
ADOperTest ad = new ADOperTest();
ad.GetADInfo();
}
}
分享到:
相关推荐
验证AD域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作
stm32 驱动ads1115 初始化 配置 读取 程序 已测试通过
java 通过LDAP 读取AD用户信息,支持定期同步,手工同步
在vc++里读取DXF文件 并对其图形进行任意角度的旋转,显示旋转后的图形
* [a-z&&[^bc]] a through z, except for b and c: [ad-z] (subtraction) [a-z&&[^bc]] 从a 到 z, 但 b 和 c 除外: [ad-z] (子集) * [a-z&&[^m-p]] a through z, and not m through p: [a-lq-z](subtraction...
DAT数据格式 5A 5A 5A 5A xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx ( 帧头 ) 帧头后面依次为第一块AD通道1数据(2 byte),第二块AD通道1数据(2 byte),第一块AD通道2数据(2 ...
通过来自openHAB的Raspberry Pi的I2C控制芯片pcf8591(AD转换器) 芯片PCF8591是AD转换器,提供电压测量并返回0到255之间的值。 PCF8591的地址范围: 72-80(0x48-0x50) 该绑定仅支持读取值。 在* .item文件中配置...
Java原始集合This is nightly bleeding-edge release支持无符号和可空类型的另一个Java原语集合采纳了最好的主意即将到来的AdHoc协议解析器代码生成器将需要添加新的功能,即无符号和可为空的原始类型。首先,我对...
● 正反向工程:StarUML可以依据类图的内容生成Java、C++、C#代码,也能够读取Java、C++、C#代码反向生成类图。反向工程有两个主要用途,其一是旧有的源码反转成图之后,可以构建UML模型的方式继续将新的设计添加...
设计一个基于网络的RSS新闻...问题:在写读取网络上的数据时因为用的rome的包,结果出现了很严重的效率问题,在第一次读取页面的时候时间超长。因为整个结构已经写好了,也懒的改了,你们可以在我的注释中看到那段代码
手机端(android),主显示端,姿态检测手环端,心率滤波读取端 mcu 采用的是esp32.结合了适配esp32的arduino以及rtos框架进行开发。 开发环境 及 语言 安卓为android studio java开发 esp32为platform io c/c++ ...
手机端(android),主显示端,姿态检测手环端,心率滤波读取端 mcu 采用的是esp32.结合了适配esp32的arduino以及rtos框架进行开发。 开发环境 及 语言 安卓为android studio java开发 esp32为platform io c/...
45.如何使用Cookie记录用户访问信息 46.如何用Cookie实现仅弹出一次同样的窗口 48.如何清除页面缓存 49.如何获取用户浏览器信息 50.如何获取用户真实的IP地址 52.如何判断网站的虚拟物理路径 53.如何解决URL含有特殊...
Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。最初是Windows NT版本的可选包,随后内置在Windows 2000、Windows XP Professional和...
/r 找到坏扇区并恢复可读取的信息。隐含着 /p 参数。 注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多...
请注意所有用户均可读取或写入 UTL_FILE_DIR 参数中指定的所有文件。 值范围: 任何有效的目录路径。 默认值: 无 plsql_v2_compatibility: 说明: 设置 PL/SQL 兼容级。如果设置为 FALSE, 将执行 PL/SQL V3 行为, ...
xml结构如下 代码如下:<ad><tupian>...// JScript 文件 var Now = new Date(); var Min
00-读取txt文本每一行&去空格.js 00-通知相册.js 001-Hello JS.js 002-if条件.js 003-循环break.js 004-循环for.js 005-循环while.js 0根据图色点击.js 0计分器.js 1(1).js 1.js 1024下载.js 11.js ...
“ 2d1ad3c6-6454-43d7-81b2-4f9a553e531a” token_type:“ bearer” refresh_token:“ 31a770cf-a4ff-4ed2-a745-cee798610cec” expires_in:59范围:“读写”} 使用参考令牌获取新令牌curl -X POST -vu ...
根据AD上的任务描述,实现基于JavaFX的应用程序。 此处提供的描述具有权威性,这里是最重要的要点: 使用“应用程序模板”的指定结构进行实施。 不允许使用SceneBuilder和FXML。 对于4.0,必须实现以下基本功能...