我正在尝试获取用户的详细信息。提供SearchControls时,它将返回一个空列表。
@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)([email protected]))",ctls, new UserAttributesMapper());
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}
如果我们打电话
ldapTemplate.search("","(&(objectClass=person)([email protected]))", new UserAttributesMapper());
没有搜索控件,它将获取用户详细信息。设置ReturningAttributes时是否要遵循任何特定条件?
最佳答案
如果未指定SearchControls
,则LdapTemplate.search()
将使用其defaultSearchScope
,默认情况下为SearchControl#SUBTREE_SCOPE
。
如果传递自己的SearchControls
对象,则LdapTemplate.search()
将使用在searchScope
中定义的SearchControls
。
但是,由于SearchControls ctls= new SearchControls();
将searchScope
设置为SearchControls#ONELEVEL_SCOPE
,因此您的搜索将仅找到属于搜索库直接子项的条目。
简而言之,您通常想要创建一个SearchControls
对象,如下所示:
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String [] attrs = {"mail"};
ctls.setReturningAttributes(attrs);