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

alw*_*inc 33 hibernate spring-security hibernate-generic-dao

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

我正在使用Spring Security和Hibernate等.

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

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

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

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

alw*_*inc 50

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

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

Authentication authentication = new UsernamePasswordAuthenticationToken(userObject, userObject.getPassword(), userObject.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
Run Code Online (Sandbox Code Playgroud)

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

  • 你的解决方案有效 但是,我会使用`PreAuthenticatedAuthenticationToken`而不是`UsernamePasswordAuthenticationToken`.这基本上做了同样的事情 - 它只是有助于澄清您的意图并增强代码的可读性 (11认同)
  • 这是更新身份验证对象中的权限,但不是原则上。知道如何更新主体吗? (2认同)