Ldaptemplate搜索返回相同的条目正确的次数

时间:2012-10-05 21:18:09

标签: java ldap

我一直在尝试搜索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;
}

用户只是一个包含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);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

显然,您在列表的每个位置使用相同的User对象,因此您不断更新相同的用户对象,而不是为每个搜索结果创建一个新对象。