【发布时间】:2012-04-16 12:59:29
【问题描述】:
我有一个标记为实体的用户类,它也实现了用户详细信息。我希望能够获取某个用户的一些属性,并根据它们的值,在 getAuthorities 方法中返回特定角色。然而,其中许多属性都是延迟加载的,并且需要 Hibernate 事务。
我尝试了从创建用户类@Transactional 到创建我使用@Transactional 的UserDetailsService 和RememberMeService。这些都不起作用!
我所有的其他 DAO 和服务类都映射为事务性工作(它们只是简单的类 - 除了顶部的 @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;
}
【问题讨论】:
-
不清楚问题是什么?然后延迟加载您的授权,或更改为渴望获取...
-
@Transactional 不起作用。至少在那种情况下
-
错误信息是什么?显示一些代码。您是否坚持授予每个用户授予权限 - 只需像对待任何其他属性一样对待它。
-
这个异常是众所周知的 - 没有会话绑定到线程:)
-
大声笑,是的,我对此很熟悉。您是否在刷新/提交之前两次调用同一会话? stackoverflow.com/questions/9721004/…