如何在Hibernate中更新后重新加载Spring Security Principal?

时间:2011-10-25 13:02:52

标签: hibernate spring-security hibernate-generic-dao

这一定是一个普遍的问题......我觉得在谷歌搜索之后,我一定不能彻底浏览一下这个答案,或者说no1已经问过了......所以请原谅我。

我正在使用Spring Security和Hibernate等。

因此,用户/主体已登录并对其个人资料进行了一些更改。

我使用DAO更新配置文件(UserDetails),我希望我的Principal自动反映此更新。

然而,当我再次获得Principal时,我得到了脏版本(从我最初的登录时开始)。

有谁知道如何让Spring Security从Hibernate重新加载更新的UserDetails?

2 个答案:

答案 0 :(得分:50)

好好挖了一下,终于找到了答案。

我们可以创建UsernamePasswordAuthenticationToken并将更新后的Principal分配给上下文。

Authentication authentication = new UsernamePasswordAuthenticationToken(userObject, userObject.getPassword(), userObject.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);

另请参阅“How to manually set an authenticated user in Spring Security / SpringMVC”。

答案 1 :(得分:0)

我有同样的问题

我通过从SecurityContextHolder获得身份验证来修复它,将其主体转换为用户,然后更新主体。

一切正常,但我不知道这是否是个好习惯。