2017-03-08 27 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; 
} 

我々はsearchcontrolesアウトと

ldapTemplate.search("","(&(objectClass=person)([email protected]))", new UserAttributesMapper());

を呼び出した場合、それはユーザの詳細情報を取得します。 ReturningAttributesの設定時に従うべき具体的な基準はありますか?

enter image description here

答えて

1

あなたがSearchControlsを指定しない場合、LdapTemplate.search()はデフォルトでSearchControl#SUBTREE_SCOPEである、そのdefaultSearchScopeを使用します。

SearchControlsオブジェクトを渡す場合、LdapTemplate.search()は、SearchControlsで定義されたsearchScopeを使用します。検索のみ検索ベースの直接の子であるエントリを検索しますので、

SearchControls ctls= new SearchControls();しかし、SearchControls#ONELEVEL_SCOPEsearchScopeを設定します。

長い話を短くするために、あなたは通常、このようなSearchControlsオブジェクトを作成します:

SearchControls ctls = new SearchControls(); 
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
String [] attrs = {"mail"}; 
ctls.setReturningAttributes(attrs); 
関連する問題