Java:LDAP搜索返回1行
我试图从我的active directory获取所有用户,但是我的代码只返回一行。我尝试了下面的方法,目前只输出一个用户Java:LDAP搜索返回1行,java,active-directory,ldap,Java,Active Directory,Ldap,我试图从我的active directory获取所有用户,但是我的代码只返回一行。我尝试了下面的方法,目前只输出一个用户 private void getUserBasicAttributes(String username, LdapContext ctx) { try { List<String> usersList = new ArrayList<String>(); SearchControls constraints =
private void getUserBasicAttributes(String username, LdapContext ctx) {
try {
List<String> usersList = new ArrayList<String>();
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
//First input parameter is search bas, it can be "CN=Users,DC=YourDomain,DC=com"
//Second Attribute can be uid=username
NamingEnumeration<SearchResult> answer = ctx.search("DC=domain,DC=com", "(&(objectCategory=user))"
, constraints);
if (answer.hasMoreElements()) {
Person person = new Person();
SearchResult attrs = ((SearchResult) answer.next());
String names[] = attrs.getName().split(",");
String name[] = names[0].split("=");
usersList.add(name[1]);
}else{
throw new Exception("Invalid User");
}
System.out.println(usersList.size());
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void getUserBasicAttribute(字符串用户名,LdapContext ctx){
试一试{
List usersList=new ArrayList();
SearchControls约束=新的SearchControls();
约束.setSearchScope(SearchControls.SUBTREE_范围);
//第一个输入参数是search bas,它可以是“CN=Users,DC=YourDomain,DC=com”
//第二个属性可以是uid=username
namingumerationanswer=ctx.search(“DC=domain,DC=com”,(&(objectCategory=user))”
(限制);
if(answer.hasMoreElements()){
Person=新人();
SearchResult attrs=((SearchResult)answer.next());
字符串名称[]=attrs.getName().split(“,”);
字符串名称[]=名称[0]。拆分(“”);
usersList.add(名称[1]);
}否则{
抛出新异常(“无效用户”);
}
System.out.println(usersList.size());
}捕获(例外情况除外){
例如printStackTrace();
}
}
如果没有循环所有结果,请在if中添加while循环
if (answer.hasMoreElements()) {
while(answer.hasMoreElements()) {
Person person = new Person();
SearchResult attrs = ((SearchResult) answer.next());
String names[] = attrs.getName().split(",");
String name[] = names[0].split("=");
usersList.add(name[1]);
}
}else{
throw new Exception("Invalid User");
}
你太难了。没有理由执行任何“拆分”pf值
// Specify the ids of the attributes to return
String[] attrIDs = { "uid" };
// Get ONLY the attributes desired
Attributes answer = ctx.getAttributes("CN=Users,DC=YourDomain,DC=com", attrIDs);
for (NamingEnumeration ae = answer.getAll(); ae.hasMore();) {
Attribute attr = (Attribute)ae.next();
System.out.println("attribute: " + attr.getID());
/* Print each value */
for (NamingEnumeration e = attr.getAll(); e.hasMore();
System.out.println(e.next()))
;
}
让我知道我能提供什么帮助。您需要
而不是如果:
while (answer.hasMoreElements()) {
Person person = new Person();
SearchResult attrs = ((SearchResult) answer.next());
String names[] = attrs.getName().split(",");
String name[] = names[0].split("=");
usersList.add(name[1]);
}
if (usersList.size() == 0) {
throw new Exception("Invalid User");
}
您还可以简化名称元素的处理。不需要解析DN。只需预先指定要返回的属性,然后直接检索它们。也不需要这样做。如果只检索一个属性,则可以直接获取它。无需迭代所有1个属性。没有回答被问到的实际问题。