/**
* JAVA 讀取AD用戶信息
* aa00a00
*/
package com.wanda.sso.client.servlet;java
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 {dom
public ADOperTest() {
}ui
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); // 設置返回屬性集url
// 根據設置的域節點、過濾器類和搜索控制器搜索LDAP獲得結果
NamingEnumeration answer = ctx.search(searchBase, searchFilter,
searchCtls);// Search for objects using the filterip
// 初始化搜索結果數爲0
int totalResults = 0;// Specify the attributes to return
int rows = 0;ci
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);
}
}get
public static void main(String args[]) {
// 實例化
ADOperTest ad = new ADOperTest();
ad.GetADInfo();
}
}servlet