1

LDAPから特定のユーザーの詳細を検索したい。だから私はユーザーの詳細を取得する次のコードを書き留めましたが、それはユーザーオブジェクトのリストを返します。基本的には、人物オブジェクトのリストではなく、人物オブジェクトのみが必要です。LDAPテンプレートを使用してIMを取得するため。個人オブジェクトを返すようにこのコードを変更するにはどうすればよいですか?

public void searchByFirstName(String loginId) {

        AndFilter filter = new AndFilter();
        filter.and(new EqualsFilter("objectclass", "Person"));
        filter.and(new EqualsFilter("cn", loginId));
        List list = ldapTemplate.search("", 
            filter.encode(),
            new AttributesMapper() {
                public Object mapFromAttributes(Attributes attrs) throws NamingException        {
                    return attrs.get("sn").get();
                }
            });


}
4

1 に答える 1

4

呼び出しているメソッドldapTemplate.search()は、常に一致するオブジェクトのリストを返します。これは、LDAPサーバーで条件に一致するすべてのオブジェクトを検索しているためです。自分に一致するユーザーloginIdが存在するかどうかわからない場合は、すでに正しい方法を使用しています。リストの長さを確認し、返されたリストから最初のアイテムを取得するだけです。

LDAPから1つのアイテムだけを取得するには、LDAPサーバー内のユーザーの識別名(DN)を知っている必要があります。DNはLDAP内のオブジェクトの一意の識別子であり、単一のオブジェクトを具体的に検索する場合は、これを知っておく必要があります。LDAP構成によっては、これはのようになる場合がありますcn=<loginId>,ou=users,dc=yourorg,dc=com

持っているものからDNを構築loginIdできる場合は、ldapTemplate.lookup(String、AttributesMapper)メソッドを使用して、単一のオブジェクトのみを検索できます。

于 2011-06-22T11:10:49.083 に答える