java如何过虑Active Directory中禁用的用户?

diypyh 2013-01-26 10:42:21
这个代码只能获取到所有的用户:

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;

public class Test10 {
public static void main(String[] args) {
new Test10().GetADInfo();
}

public void GetADInfo() {
Hashtable<String,String> HashEnv = new Hashtable<String,String>();
LdapContext ctx = null ;

String url = "ldap://127.0.0.1:389/dc=test,dc=com";
String username = "Administrator@test.com";
String adminPassword = "admin";
HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
HashEnv.put(Context.SECURITY_PRINCIPAL, username);
HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword);
HashEnv.put(Context.PROVIDER_URL, url);
try {
ctx = new InitialLdapContext(HashEnv, null);
SearchControls searchCtls = new SearchControls();
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<?> en = ctx.search("", "objectClass=User", searchCtls);

while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
Attributes attrs = si.getAttributes();
if (attrs != null) {
Attribute attr = null;
attr = attrs.get("sn");
if(attr != null) System.out.println(attr.getID() + ":" + attr.get());
attr = attrs.get("sAMAccountName");
if(attr != null) System.out.println(attr.getID() + ":" + attr.get());
attr = attrs.get("givenName");
if(attr != null) System.out.println(attr.getID() + ":" + attr.get());
attr = attrs.get("mail");
if(attr != null) System.out.println(attr.getID() + ":" + attr.get());
attr = attrs.get("homePhone");
if(attr != null) System.out.println(attr.getID() + ":" + attr.get());
attr = attrs.get("telephoneNumber");
if(attr != null) System.out.println(attr.getID() + ":" + attr.get());

System.out.println();
}
}
}
} catch (NamingException e) {
e.printStackTrace();
} finally {
if(ctx != null){
try {
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
}
}


但我现在的需求是只能获取启用中的用户,如下图(只获取红色框内的3个用户):


按我的初步估计应该要修改这个过虑器(“objectClass=User”):
NamingEnumeration<?> en = ctx.search("", "objectClass=User", searchCtls);


只是不知道要修改成什么才能过虑掉禁用的用户?有哪位知道的呢?谢谢。
...全文
201 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightyq 2013-01-26
  • 打赏
  • 举报
回复
嗯,原来是userAccountControl属性。
  • 打赏
  • 举报
回复
自己想到解决办法很好。
brightyq 2013-01-26
  • 打赏
  • 举报
回复
循环中,用属性的值去判断试下,attrs.get("whenChanged")的值输出是什么?能不能用这个值区别启用的还是禁用的。
diypyh 2013-01-26
  • 打赏
  • 举报
回复
路过的朋友来抢分啦
diypyh 2013-01-26
  • 打赏
  • 举报
回复
自己搞定了,这样来过虑:

attr = attrs.get("userAccountControl");
						if(attr != null) {
							String control = Integer.toBinaryString(Integer.valueOf((String)attr.get()));
							if("1".equals(control.substring(control.length()-2,control.length()-1))){
								continue;
							}
						};

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧