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);
どんな助けでも大歓迎です。