Java ldapTemplate.search返回SearchControls上的空列表

Java ldapTemplate.search返回SearchControls上的空列表,java,ldap,spring-ldap,Java,Ldap,Spring Ldap,我正在尝试获取用户的详细信息。当提供SearchControl时,它返回一个空列表 @Override public User getUserDetails(String userName) { SearchControls ctls= new SearchControls(); String [] attrs = {"mail"}; ctls.setReturningAttributes(attrs); log.info("executing {getUser

我正在尝试获取用户的详细信息。当提供SearchControl时,它返回一个空列表

@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;
}
@覆盖
公共用户getUserDetails(字符串用户名){
SearchControls ctls=新的SearchControls();
字符串[]attrs={“邮件”};
设置返回属性(属性);
info(“正在执行{getUserDetails}”);
List List=ldapTemplate.search(“,”(&(objectClass=person)(mail=josh)。nail@gmail.com)),ctls,new UserAttributesMapper());
if(list!=null&&!list.isEmpty()){
返回列表。获取(0);
}
返回null;
}
如果我们打电话

ldapTemplate.search(“,”(&(objectClass=person)(mail=josh)。nail@gmail.com)),新的UserAttributesMapper())

不使用SearchControls,它将获取用户详细信息。设置ReturningAttribute时是否需要遵循任何特定标准


如果不指定
SearchControls
,则
LdapTemplate.search()
将使用其
defaultSearchScope
,默认情况下它是
SearchControl#子树范围

如果您传递自己的
SearchControls
对象,
LdapTemplate.search()
将使用在
SearchControls
中定义的
searchScope

SearchControls ctls=newsearchcontrols()
searchScope
设置为
SearchControls#ONELEVEL_SCOPE
,因此您的搜索将只查找作为搜索库直接子项的条目

长话短说,您通常希望创建一个
SearchControls
对象,如下所示:

SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String [] attrs = {"mail"};
ctls.setReturningAttributes(attrs);