如何使用 Spring Security 重新加载用户更新权限

新手上路,请多包涵

我正在使用 Spring Security 通过 OpenID 进行身份验证的应用程序。当用户登录时,一些权限会加载到他的会话中。

我拥有完全权限的用户,可以修改其他用户的权限(撤销、添加角色)。我的问题是,如何动态更改用户会话权限? (不能使用 SecurityContextHolder 因为我想更改另一个用户会话)。

简单的方法:使用户会话无效,但是如何呢?更好的方法:使用新权限刷新用户会话,但是如何?

原文由 Aure77 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 985
1 个回答

如果您需要动态更新登录用户的权限(当这些更改时,无论出于何种原因),当然不必注销和登录,您只需要重置 Authentication 对象(安全令牌) 在春季 SecurityContextHolder

例子:

 Authentication auth = SecurityContextHolder.getContext().getAuthentication();

List<GrantedAuthority> updatedAuthorities = new ArrayList<>(auth.getAuthorities());
updatedAuthorities.add(...); //add your role here [e.g., new SimpleGrantedAuthority("ROLE_NEW_ROLE")]

Authentication newAuth = new UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), updatedAuthorities);

SecurityContextHolder.getContext().setAuthentication(newAuth);

原文由 leo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题