重新加载当前登录用户的权限

时间:2017-11-22 11:58:49

标签: java spring spring-security

我记录为"超级管理员"我已经更改了一个特定用户组的权限。在此用户组中,当前登录的用户具有活动会话。 如何在不注销的情况下重新加载所有登录用户权限?

我将所有活动的会话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();
}

1 个答案:

答案 0 :(得分:4)

不要痛苦地尝试使用新权限更新所有现有用户上下文,而是让他们注销并重新登录。

更改用户权限时,您可以检查他当前是否有活动会话向客户端发送通知。通过这种方式,他将被主动通知有关许可变更的信息,并且他现在拥有更多权力。与后台权限的秘密更改相比,这很可能会为用户带来积极的体验。 而且我很确定他不会忘记退出并登录,因为这会让他觉得他可以自己激活新的权限。

<强>结论: 这对您来说更容易,也为用户带来更好的体验。