找到结果时如何停止ldap搜索
how to stop ldap search when result is found
我正在尝试从 distinguishedName 参数中获取登录用户的组名。我可以找到组名,但搜索是 countine,即使我在 ldap 搜索中找到了那个人,并且在
PartialResultException:未处理的延续引用;
这是我的代码
我想在获得成功结果后停止 ldapTemplate.search
进程,你们知道吗?
public List<String> getUserGroup(String username) throws Exception {
try {
LdapQuery query;
LdapTemplate ldapTemplate = ldapConf.ldapTemplate();
if (ldapConf.getSearchBase().isEmpty()) {
System.out.println("searchbase empty");
query = query().where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
} else
query = query().base(ldapConf.getSearchBase()).where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
List<String> result = ldapTemplate.search(query, new AttributesMapper<String>() {
public String mapFromAttributes(Attributes attrs) throws NamingException, javax.naming.NamingException {
for (Enumeration vals = attrs.get("distinguishedName").getAll(); vals.hasMoreElements();) {
String userName = (String) vals.nextElement();
if (userName.contains(username)) {
return (String) attrs.get("distinguishedName").get();
}
}
return null;
}
});
logger.debug("ldap groups" + result);
while (result.remove(null)) {
}
return result;
} catch (Exception e) {
e.printStackTrace();
logger.error(e, e);
throw e;
}
}
我完全误解了ldap搜索机制。我的 ldap 查询也是错误的
query = query().where(env.getProperty("ldap.searchKeyword")).isPresent();
而不是 isPresent()
我应该使用 is(username)
这样我就可以直接获得我想要的用户。我还试图在我的代码中获取用户 DN。 new AttributesMapper<String>()
而不是 new ContextMapper<String>()
提供 DN
我正在尝试从 distinguishedName 参数中获取登录用户的组名。我可以找到组名,但搜索是 countine,即使我在 ldap 搜索中找到了那个人,并且在
PartialResultException:未处理的延续引用;
这是我的代码
我想在获得成功结果后停止 ldapTemplate.search
进程,你们知道吗?
public List<String> getUserGroup(String username) throws Exception {
try {
LdapQuery query;
LdapTemplate ldapTemplate = ldapConf.ldapTemplate();
if (ldapConf.getSearchBase().isEmpty()) {
System.out.println("searchbase empty");
query = query().where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
} else
query = query().base(ldapConf.getSearchBase()).where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
List<String> result = ldapTemplate.search(query, new AttributesMapper<String>() {
public String mapFromAttributes(Attributes attrs) throws NamingException, javax.naming.NamingException {
for (Enumeration vals = attrs.get("distinguishedName").getAll(); vals.hasMoreElements();) {
String userName = (String) vals.nextElement();
if (userName.contains(username)) {
return (String) attrs.get("distinguishedName").get();
}
}
return null;
}
});
logger.debug("ldap groups" + result);
while (result.remove(null)) {
}
return result;
} catch (Exception e) {
e.printStackTrace();
logger.error(e, e);
throw e;
}
}
我完全误解了ldap搜索机制。我的 ldap 查询也是错误的
query = query().where(env.getProperty("ldap.searchKeyword")).isPresent();
而不是 isPresent()
我应该使用 is(username)
这样我就可以直接获得我想要的用户。我还试图在我的代码中获取用户 DN。 new AttributesMapper<String>()
而不是 new ContextMapper<String>()
提供 DN