我一直在尝试搜索 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);
任何帮助将不胜感激。