我需要在域用户组内使用 java 查找 Microsoft Active Directory 中给定用户的组成员。我的广告结构如下。
reg1.subdomain.domain.com - 用户(类型 - 容器) - 域用户(类型 - 安全组全局)
我写了下面的代码。但我无法查询域用户组内的用户。
public static String ldapUri = "ldap://ldapuri.com:389";
public static String usersContainer = "CN=users,DC=reg1,DC=subdomain,DC=domain,DC=com";
public ArrayList<String> getUserGroups(String username, String password){
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUri);
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext ctx = new InitialDirContext(env);
SearchControls ctls = new SearchControls();
String[] attrIDs = { "memberOf" };
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
NamingEnumeration answer = ctx.search(usersContainer, "(&(objectCategory=group)(cn=Domain Users)(sAMAccountName=username))", ctls);
while (answer.hasMore()) {
SearchResult rslt = (SearchResult) answer.next();
Attributes attrs = rslt.getAttributes();
try{
String groups = attrs.get("memberOf").toString();
String [] groupname = groups.split(":");
System.out.println(groupname[1]);
}catch (Exception e){
System.out.println("no members");
}
}
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
return list;
}
有人可以指出我添加的过滤器查询有什么问题吗?
ITMISS
慕斯709654
有只小跳蛙
相关分类