spring - 如何更新/删除 Spring Security 中所有主体的角色

标签 spring spring-security

假设我有 3 个用户登录到我的应用程序,一个管理员用户和 2 个普通用户共享一组权限,这些权限将转换为角色,即他们每个人都有 ROLE_EDIT , ROLE_ADDROLE_DELETE ,例如。

登录后,管理员用户进入并从其共享权限集中删除角色,假设该权限集来自 ROLE_EDIT, ROLE_ADD, ROLE_DELETE到只是ROLE_EDIT, ROLE_ADD 。我们现在要删除 ROLE_DELETE当前登录的两个用户的角色。

我知道SecurityContextHolder是线程范围的,因此其中仅包含管理员用户的信息。有没有一种简单的方法来访问当前登录的 2 个用户的身份验证信息,以便我可以删除该角色,而无需强制他们注销并重新登录?

最佳答案

SecurityContext 默认情况下将存储在 key SPRING_SECURITY_CONTEXT 下的 HTTP session 中(由 SecurityContextHolderFilter 处理,并进一步委托(delegate)给 HttpSessionSecurityContextRepository)。这意味着理论上您可以首先获取需要更新其角色的用户的 HttpSession,然后从中获取他的 SecurityContext 并进行更新。

遗憾的是Servlet没有提供通过session ID获取HTTP session的API,但是你可以引用this idea用于手动跟踪 session 和用户 ID 之间的映射。或者检查 Web 容器是否提供 API 来执行此操作。

关于spring - 如何更新/删除 Spring Security 中所有主体的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76772034/

相关文章:

spring - neo4j和 Elasticsearch 在同一spring boot项目中(冲突lucene版本)

Springboot无法读取Yaml配置

java - Spring Security 3.2 和 maximumSessions - 注销不更新 SessionRegistry

java - 如何高效处理Spring中的错误: Could not resolve view with name 'forward:/oauth/error'

java - 使用 UserDetailsS​​ervice 和 Java 配置进行 Spring Security 登录

spring-boot - Spring session : How to create separate session management policies for different URLs

java - 身份验证后存储附加信息[Spring]

java - Spring 安全 : saved SecurityContext got a Null authentication

java - Spring 与 EJB。 Spring可以替代EJB吗?

java - 在处理 spring proguard 时遇到困难