UserDetailsも実装するエンティティとしてマークされたUserクラスがあります。特定のユーザーのいくつかのプロパティを取得し、それらの値に基づいて、getAuthorities
メソッド内の特定のロールを返すことができるようにしたいと思います。ただし、これらのプロパティの多くは遅延読み込みされ、Hibernateトランザクションを必要とします。
@Transactional
ユーザークラスの作成からUserDetailsService
、RememberMeService
を使用するまで、何でも試しました@Transactional
。それらのどれも機能しません!
トランザクション作業としてマップされた他のすべてのDAOクラスとServiceクラス(これらは単純なクラスであり、@ Transactional以外のアノテーションはありません)
更新:これは、クラスUserのオーバーライドされたgetUserDetailsです
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
GrantedAuthority auth = new GrantedAuthority() {
@Override
public String getAuthority() {
// TODO Auto-generated method stub
return "ROLE_USER";
}
};
ArrayList<GrantedAuthority> result = new ArrayList<GrantedAuthority>();
if (options.size() > 0) {
for (Option o : options) {
result.add(createAuthority(Option.getStringType(o.type)));
}
}
result.add(auth);
return result;
}