2016-12-23 22 views
0

ユーザーのすべてのグループを読み込んでリストに入れたいと思います。 LDAPクエリですSpring LdapTemplate - 同じ属性名で値を読み取るにはどうすればいいですか

のldapsearch -h [サーバ名] -p [ポート] "OU =人、OU = FOO、O =バー、C = comの" -bサブ-s " (ID = 123)」

どのように結果は次のようになります。

ID:123

名:ジョン

FIRSTNAME:BAKER

GROUPLIST:CN = GROUP1.COM、CN = GROUPS、OU = FOO、O = BAR、C = COM

GROUPLIST:CN = GROUP2.COM、CN =グループ、 ou = FOO、o = BAR、c = COM

私はSpringのLdapTemplate実装を使用します。それはうまく動作しますが、同じ名前の複数の属性を持つ場合(上記の「grouplist」を参照)、結果をどのように処理できますか?私はIncrementalAttributesMapperを使用しようとしましたが、うまく動作しませんでした。

public MyUser getUser(String userId) { 
    LdapQuery searchQuery = LdapQueryBuilder.query() 
       .base("ou=people,ou=foo,o=bar,c=com") 
       .searchScope(SearchScope.SUBTREE) 
       .filter(new EqualsFilter("id", userId)); 

    return ldapTemplate.search(searchQuery, getUserAttributesMapper()); 
} 

public static AttributesMapper getUserAttributesMapper() { 
     return attributes -> { 

      IncrementalAttributesMapper groupAttributesMapper = new DefaultIncrementalAttributesMapper("grouplist"); 

      MyUser myUser = MyUser.builder() 
       .id(attributes.get("id").get().toString()) 
       .name(attributes.get("name").get().toString()) 
       .firstname(attributes.get("firstname").get().toString()) 
       .groupIds(groupAttributesMapper.getValues("cn")) 
       .build(); 

      return myUser; 
     }; 
    } 

私は次のように属性を読み取ろう:

attributes.get("grouplist").get().toString() 

私は最初のグループを取得:

GROUPLIST:CN = GROUP1.COM、CN =グループ、OUを= FOO、o = BAR、c = COM

ご協力いただきありがとうございます!私はいくつかのメンバーが含まれるグループを持っていたその場合

List values = DefaultIncrementalAttributesMapper.lookupAttributeValues(ldapTemplate, baseDN, "member"); 

+0

'attributes.get(" group list ")'は反復処理できるコレクションを返します。 – EJP

答えて

1

私はこのコードを使用して同様の問題を解決しました。このように:

member: CN=Name1,OU=Users,DC=bar,DC=foo,DC=com 
member: CN=Name2,OU=Users,DC=bar,DC=foo,DC=com 
member: CN=Name3,OU=Users,DC=bar,DC=foo,DC=com 

結果として、私はグループの別々のメンバーのリストを持っています。

+0

これは助けて、私が見たのとは異なる解決策です。おかげでfoxygun。 –

関連する問題