0

LDAPディレクトリ内のすべてのユーザーを検索しようと取り組んできました。検索を実行すると、ディレクトリにある正しいエントリ数として返されますが、すべて同じエントリ(最後のエントリ)の複製です。これがなぜなのか理解できないようです。これが私のコードスニペットの一部です:

実際に検索を実行する関数:

public List<User> getAllUsers(){
    AndFilter filter = new AndFilter();
    filter.and(new EqualsFilter("objectclass", "person"));
    List<User> users = ldapTemplate.search(DistinguishedName.EMPTY_PATH,
                            filter.encode(), new UserAttributesMapper());

    return users;
}

ユーザーは、ユーザーに関するすべての情報を含むゲッターと設定を備えた単なるクラスです。これUserAttributesMapperは次のとおりです。

private static class UserAttributesMapper implements AttributesMapper {
    public Object mapFromAttributes(Attributes attrs) throws NamingException {
        ...
        User user = (User) AppUtils.getBean("user");    
        NamingEnumeration ae = attrs.getAll();
        ...
        //set user attributes through setters
        // ie: if(attrs.get("uid") != null) user.setUid((String) attrs.get("uid").get());
        ...
        return user;
    }
}

1人のユーザーを問題なく返すことができ、美しく機能するため、マッパーが機能することはわかっています。List最後のユーザーエントリのみが返される理由がわかりません。static私の考えの1つは、ステートメントでの使用でした

User user = (User) AppUtils.getBean("user");

Userクラスには注釈が付けられ@Component("user")、の関数getBean

public static Object getBean(final String name) {
    if(applicationContext == null) {
        throw new IllegalArgumentException(
                "ApplicationContext is not initialized");
    }
    return applicationContext.getBean(name);

どんな助けでも大歓迎です。

4

1 に答える 1

0

明らかに、リストのすべての位置で同じ User オブジェクトを使用しているため、検索結果ごとに新しいオブジェクトを作成するのではなく、同じオブジェクトを更新し続けます。

于 2012-10-05T22:41:22.443 に答える