package com.norteksoft.acs.ldap.impl;
import java.util.ArrayList;
import java.util.List;
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.LdapContext;
import com.norteksoft.acs.ldap.LdapService;
public class WindowsAdService extends LdapService{
private static String returnedAtts[] = {
"sAMAccountName", // 登录名
"name", // 用户名
"mail", // email
"telephoneNumber" // 电话
};
public WindowsAdService(String adminName, String password, String ldapUrl) {
super(adminName, password, ldapUrl);
}
public List<LdapUser> getAllUser(){
LdapContext ldatCtx = initialLdap();
SearchControls searchCtls = new SearchControls(); // Create the search controls
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // Specify the search scope
String searchFilter = "objectClass=User"; // specify the LDAP search filter
searchFilter="objectClass=Group";
searchFilter="objectClass=Person";
// searchFilter="objectClass=Domain"; // Domain = DC=norteksoft,DC=com
String searchBase = "DC=nortek,DC=com"; // Specify the Base for the search//搜索域节点
searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集
// Search for objects using the filter
try {
NamingEnumeration<SearchResult> answer = ldatCtx.search(searchBase, searchFilter, searchCtls);
List<LdapUser> users = new ArrayList<LdapUser>();
LdapUser user = null;
while (answer.hasMoreElements()) {
SearchResult sr = answer.next();
Attributes attrs = sr.getAttributes();
user = new LdapUser();
user.setUserDn(sr.getName());
users.add(user);
if (attrs != null) {
NamingEnumeration<? extends Attribute> ae = attrs.getAll();
while(ae.hasMore()){
Attribute attr = (Attribute) ae.next();
NamingEnumeration<?> e = attr.getAll();
if(e.hasMore()){
if("sAMAccountName".equals(attr.getID())){
user.setUsername(getString(e.next()));
}else if("name".equals(attr.getID())){
user.setName(getString(e.next()));
}else if("mail".equals(attr.getID())){
user.setEmail(getString(e.next()));
}else if("telephoneNumber".equals(attr.getID())){
user.setTelephone(getString(e.next()));
}
}
}
}
}
return users;
} catch (NamingException e) {
logger.error(" get all user error. ", e);
return null;
} finally{
closeLdap(ldatCtx);
}
}
public static void main(String[] args) {
WindowsAdService ad = new WindowsAdService("administrator@nortek.com", "123abc,.", "ldap://192.168.1.5:389");
List<LdapUser> users = ad.getAllUser();
System.out.println(users);
System.exit(0);
}
}