【问题标题】:How to handle dynamic roles changing in Spring security?如何处理 Spring 安全中的动态角色变化?
【发布时间】:2014-03-22 22:38:50
【问题描述】:

假设在一个应用程序中,我们有接口(UI)来分配角色。

第一种情况:

也就是说user A是谁normal user。一位管理员使用 UI 为他分配了ADMIN 角色。 现在,当user A 登录应用程序时,他可以看到 ADMIN 可以访问的所有选项卡。

第二种情况:

同时(当他登录并以 ADMIN 角色进行会话时),admin 将用户 A 设为具有正常权限的normal USER

但由于他以 ADMIN 身份登录,因此他可以访问所有选项卡的所有管理员信息,因为在此会话中他具有 ADMIN 角色。

我该如何解决这个问题??

【问题讨论】:

  • 我不明白如何解决这个问题?但我同意你的看法
  • AFAIK 不支持 refreshing Spring 中的身份验证(安全上下文)。如果这与您有关,您可能需要自己实现它。
  • 快速搜索类似问题:stackoverflow.com/questions/9910252/…, ...
  • 我们可以嵌入任何其他东西来解决这个问题。我在一个视频中听说我们可以嵌入一些技术来解决这个问题,但声音并不清晰。实现我的意味着总是调用数据库来检查用户是否有角色。
  • 您提供的链接没有让我知道如何在不调用 repo 的情况下配置角色的动态更改。

标签: spring-security roles


【解决方案1】:

第一种方法是即时使任何现有的用户会话过期。 以下帖子描述了两种替代方案Is it possible to invalidate a spring security session?

一种更复杂的方法是在他的权限发生变化时在列表中标记该用途。 这是一个很好的例子Implementation of singleton thread-safe list

此外,如果您添加一个自定义 spring 安全过滤器,该过滤器会检查用户是否在列表中,并在必要时重新验证用户。我会使用 switchuserfilter 作为参考实现。您无需切换用户,而是创建一个新的身份验证对象并更新 SecurityContextHolder。

所有必要的逻辑都应该包含在http://docs.spring.io/autorepo/docs/spring-security/3.0.x/apidocs/org/springframework/security/web/authentication/switchuser/SwitchUserFilter.html

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 2012-04-08
    • 2017-09-15
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多