ldapTemplate.search returns searchControles 上的空列表
ldapTemplate.search returns empty list on searchControles
我正在尝试获取用户的详细信息。提供 SearchControls 时,它 returns 一个空列表。
@Override
public User getUserDetails(String userName) {
SearchControls ctls= new SearchControls();
String [] attrs = {"mail"};
ctls.setReturningAttributes(attrs);
log.info("executing {getUserDetails}");
List<User> list = ldapTemplate.search("","(&(objectClass=person)(mail=josh.nail@gmail.com))",ctls, new UserAttributesMapper());
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
如果我们调用
ldapTemplate.search("","(&(objectClass=person)(mail=josh.nail@gmail.com))", new UserAttributesMapper());
没有搜索控件,它会获取用户详细信息。设置 ReturningAttributes 时是否有任何特定标准要遵循?
如果您不指定 SearchControls
,LdapTemplate.search()
将使用其 defaultSearchScope
,默认情况下为 SearchControl#SUBTREE_SCOPE
。
如果您传递自己的 SearchControls
对象,LdapTemplate.search()
将使用在您的 SearchControls
.
中定义的 searchScope
SearchControls ctls= new SearchControls();
但是将 searchScope
设置为 SearchControls#ONELEVEL_SCOPE
,因此您的搜索将仅查找作为搜索基础的直接子项的条目。
长话短说,您通常需要像这样创建一个 SearchControls
对象:
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String [] attrs = {"mail"};
ctls.setReturningAttributes(attrs);
我正在尝试获取用户的详细信息。提供 SearchControls 时,它 returns 一个空列表。
@Override
public User getUserDetails(String userName) {
SearchControls ctls= new SearchControls();
String [] attrs = {"mail"};
ctls.setReturningAttributes(attrs);
log.info("executing {getUserDetails}");
List<User> list = ldapTemplate.search("","(&(objectClass=person)(mail=josh.nail@gmail.com))",ctls, new UserAttributesMapper());
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
如果我们调用
ldapTemplate.search("","(&(objectClass=person)(mail=josh.nail@gmail.com))", new UserAttributesMapper());
没有搜索控件,它会获取用户详细信息。设置 ReturningAttributes 时是否有任何特定标准要遵循?
如果您不指定 SearchControls
,LdapTemplate.search()
将使用其 defaultSearchScope
,默认情况下为 SearchControl#SUBTREE_SCOPE
。
如果您传递自己的 SearchControls
对象,LdapTemplate.search()
将使用在您的 SearchControls
.
searchScope
SearchControls ctls= new SearchControls();
但是将 searchScope
设置为 SearchControls#ONELEVEL_SCOPE
,因此您的搜索将仅查找作为搜索基础的直接子项的条目。
长话短说,您通常需要像这样创建一个 SearchControls
对象:
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String [] attrs = {"mail"};
ctls.setReturningAttributes(attrs);