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.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.LdapContext;
import com.norteksoft.acs.ldap.LdapService;
public class DominoService extends LdapService{
private static String returnedAtts[] = {
"uid", // 登录名
"cn", // 用户名
"mail", // email
"objectClass" //
};
public DominoService(String adminName, String password, String ldapUrl) {
super(adminName, password, ldapUrl);
}
public static void main(String[] args) {
DominoService ad = new DominoService("cn=admin", "123456", "ldap://192.168.1.238:389");
List<LdapUser> users = ad.getAllUser();
System.out.println(users);
}
@Override
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 searchBase = "o=norteksoft"; // Specify the Base for the search//搜索域节点
searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集
List<LdapUser> users = new ArrayList<LdapUser>();
try {
search(ldatCtx, searchBase, searchCtls, users);
} catch (NamingException e) {
e.printStackTrace();
} finally{
closeLdap(ldatCtx);
}
return users;
}
public void search(LdapContext ldatCtx, String searchBase, SearchControls searchCtls, List<LdapUser> users) throws NamingException{
NamingEnumeration<SearchResult> answer = ldatCtx.search(searchBase, null);
LdapUser user = null;
while (answer.hasMoreElements()) {
SearchResult sr = answer.next();
Attributes attrs = sr.getAttributes();
if(attrs.get("objectClass").contains("dominoPerson")){ // person
user = new LdapUser();
user.setUserDn(sr.getNameInNamespace());
user.setUsername(getAttributeValue(attrs, "uid"));
user.setName(getAttributeValue(attrs, "cn"));
if(user.getUsername() == null) user.setUsername(user.getName());
user.setEmail(getAttributeValue(attrs, "mail"));
users.add(user);
}else if(attrs.get("objectClass").contains("dominoOrganizationalUnit")){ // organizationalUnit
search(ldatCtx, sr.getNameInNamespace(), searchCtls, users);
}
}
}
}