2017-03-08 19 views
0

我想獲取用戶的詳細信息。當提供SearchControls時,它返回一個空列表。ldapTemplate.search返回searchControles上的空列表

@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());

與出searchcontroles,它獲取用戶詳細信息。在設置ReturningAttributes時是否有特定的標準?

enter image description here

回答

1

如果不指定SearchControls,將LdapTemplate.search()將利用其defaultSearchScope,默認爲SearchControl#SUBTREE_SCOPE

如果您傳遞自己的SearchControls對象,LdapTemplate.search()將使用在SearchControls中定義的searchScope。然而

SearchControls ctls= new SearchControls();設置searchScopeSearchControls#ONELEVEL_SCOPE,所以你的搜索只能找到搜索基的直接子項。

要長話短說,你通常要創建一個SearchControls對象是這樣的:

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