40

这一定是一个普遍的问题......我觉得在谷歌搜索之后,我一定只是没有彻底四处寻找答案,或者没有人问过它......所以请原谅我。

我正在使用 Spring Security 和 Hibernate 等。

因此,用户/负责人已登录并对他们的个人资料进行了一些更改。

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

但是,当我再次获得校长时,我得到了肮脏的版本(来自我的初始登录)。

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

4

2 回答 2

55

OK 挖了一圈,终于找到了答案。

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

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

另请参阅“如何在 Spring Security / SpringMVC 中手动设置经过身份验证的用户”。

于 2012-08-02T00:28:13.370 回答
0

我有同样的问题

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

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

于 2020-08-08T05:07:16.247 回答