这一定是一个普遍的问题......我觉得在谷歌搜索之后,我一定不能彻底浏览一下这个答案,或者说no1已经问过了......所以请原谅我。
我正在使用Spring Security和Hibernate等。
因此,用户/主体已登录并对其个人资料进行了一些更改。
我使用DAO更新配置文件(UserDetails),我希望我的Principal自动反映此更新。
然而,当我再次获得Principal时,我得到了脏版本(从我最初的登录时开始)。
有谁知道如何让Spring Security从Hibernate重新加载更新的UserDetails?
答案 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获得身份验证来修复它,将其主体转换为用户,然后更新主体。
一切正常,但我不知道这是否是个好习惯。