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;
}

User 只是一个具有 getter 和设置的类,其中包含有关用户的所有信息。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;
    }
}

我知道映射器可以正常工作,因为我可以毫无问题地返回一个用户并且它工作得很好。我只是不明白为什么它只返回List最后一个用户条目。我的一个想法是static在声明中使用

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 回答