查询活动目录使用 Java for samaccountname's Tied to a Specific Group
Query active directory Using Java for samaccountname's Tied to a Specific Group
您好,下面的 LDAP 查询 return 是特定组中成员 "givenName" 的列表。但是,我想 return 一个特定组中的 "sAMAccountName" 成员列表。我对 LDAP 不太熟悉,不确定如何完成此操作。感谢任何帮助。
public LdapContext getLdapContext(){
LdapContext ctx = null;
String connection = null;
try{
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "Simple");
env.put(Context.SECURITY_PRINCIPAL, "userPrincipalName");
env.put(Context.SECURITY_CREDENTIALS, "Password");
env.put(Context.PROVIDER_URL, "domainController");
ctx = new InitialLdapContext(env, null);
connection = "Connection Successful.";
}catch(NamingException nex){
connection = "LDAP Connection: FAILED";
nex.printStackTrace();
}
this.getUserBasicAttributes("(&(objectClass=group)(CN=Users_Group))", ctx);
return ctx;
}
private void getUserBasicAttributes(String groupID, LdapContext ctx) {
try {
String userName = null;
String member = null;
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = {"member"};
constraints.setReturningAttributes(attrIDs);
NamingEnumeration answer = ctx.search("DC=Domain,DC=com", groupID, constraints);
if (answer.hasMore()) {
Attributes attrs = ((SearchResult) answer.next()).getAttributes();
member = attrs.get("member").toString();
}else{
throw new Exception("Invalid Group");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return;
}
上述查询的结果类似于以下内容:
member: CN=FistName
LastName,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData,
CN=FistName2
LastName2,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData,
CN=FistName3
LastName3,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData,
CN=FistName4
LastName4,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData
您粘贴的代码和粘贴的输出不会检索成员的 givenName
属性。它仅检索具有 cn=Users_Group
.
的组成员的 dn
您的 dn
用户是根据用户的 cn
属性构建的,因此您会看到 CN=FistName LastName,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData
.
要检索这些用户的 samAccountName
,您现在必须遍历这些 dn
并检索与 dn
对应的每个条目的 samAccountName
属性.
由于您引用的是 "samAccountName",因此假设您使用的是 Microsoft Active Directory,您可以使用过滤器 (LDAP_MATCHING_RULE_IN_CHAIN) 作为:
(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=CN=GroupOne,OU=Security Groups,OU=Groups,DC=YOURDOMAIN,DC=NET)
和return将"samAccountName"作为一个属性。
-吉姆
您好,下面的 LDAP 查询 return 是特定组中成员 "givenName" 的列表。但是,我想 return 一个特定组中的 "sAMAccountName" 成员列表。我对 LDAP 不太熟悉,不确定如何完成此操作。感谢任何帮助。
public LdapContext getLdapContext(){
LdapContext ctx = null;
String connection = null;
try{
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "Simple");
env.put(Context.SECURITY_PRINCIPAL, "userPrincipalName");
env.put(Context.SECURITY_CREDENTIALS, "Password");
env.put(Context.PROVIDER_URL, "domainController");
ctx = new InitialLdapContext(env, null);
connection = "Connection Successful.";
}catch(NamingException nex){
connection = "LDAP Connection: FAILED";
nex.printStackTrace();
}
this.getUserBasicAttributes("(&(objectClass=group)(CN=Users_Group))", ctx);
return ctx;
}
private void getUserBasicAttributes(String groupID, LdapContext ctx) {
try {
String userName = null;
String member = null;
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = {"member"};
constraints.setReturningAttributes(attrIDs);
NamingEnumeration answer = ctx.search("DC=Domain,DC=com", groupID, constraints);
if (answer.hasMore()) {
Attributes attrs = ((SearchResult) answer.next()).getAttributes();
member = attrs.get("member").toString();
}else{
throw new Exception("Invalid Group");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return;
}
上述查询的结果类似于以下内容:
member: CN=FistName
LastName,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData,
CN=FistName2
LastName2,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData,
CN=FistName3
LastName3,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData,
CN=FistName4
LastName4,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData
您粘贴的代码和粘贴的输出不会检索成员的 givenName
属性。它仅检索具有 cn=Users_Group
.
dn
您的 dn
用户是根据用户的 cn
属性构建的,因此您会看到 CN=FistName LastName,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData
.
要检索这些用户的 samAccountName
,您现在必须遍历这些 dn
并检索与 dn
对应的每个条目的 samAccountName
属性.
由于您引用的是 "samAccountName",因此假设您使用的是 Microsoft Active Directory,您可以使用过滤器 (LDAP_MATCHING_RULE_IN_CHAIN) 作为:
(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=CN=GroupOne,OU=Security Groups,OU=Groups,DC=YOURDOMAIN,DC=NET)
和return将"samAccountName"作为一个属性。 -吉姆