我记录为"超级管理员"我已经更改了一个特定用户组的权限。在此用户组中,当前登录的用户具有活动会话。 如何在不注销的情况下重新加载所有登录用户权限?
我将所有活动的会话ID存储在数据库中,然后在"重新加载权限"我获取它们并传递给这个方法:
TT_EMP_ID Integer
TT_FROMDATE DateTime
TT_TODATE DateTime
TT_HOURS Float
... more
Index TT_I0_EMP_CONTRACT on TT_EMP_ID, TT_FROMDATE Primary, Unique
任何想法如何刷新所有特定会话ID的权限?
以下用于重新加载请求" owner"的代码示例,是否有办法获取任何活动会话的Authentication对象?
@Autowired
private SessionRegistry sessionRegistry;
private void refreshSessionWithNewAuthorities(Collection<GrantedAuthority> authorities, String sessionId) {
SessionInformation sessionInformation = sessionRegistry.getSessionInformation(sessionId);
org.springframework.security.core.userdetails.User principal = (org.springframework.security.core.userdetails.User) sessionInformation.getPrincipal();
sessionRegistry.registerNewSession(sessionId, principal);
sessionInformation.refreshLastRequest();
}
答案 0 :(得分:4)
不要痛苦地尝试使用新权限更新所有现有用户上下文,而是让他们注销并重新登录。
更改用户权限时,您可以检查他当前是否有活动会话向客户端发送通知。通过这种方式,他将被主动通知有关许可变更的信息,并且他现在拥有更多权力。与后台权限的秘密更改相比,这很可能会为用户带来积极的体验。 而且我很确定他不会忘记退出并登录,因为这会让他觉得他可以自己激活新的权限。
<强>结论:强> 这对您来说更容易,也为用户带来更好的体验。