如何处理Spring安全性中的动态角色更改?

时间:2014-02-21 12:04:30

标签: spring-security roles

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

第一种情况:

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

第二种情况:

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

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

我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

第一种方法是在运行中使任何现有的用户会话到期。 以下帖子介绍了两种备选方案Is it possible to invalidate a spring security session?

更复杂的方法是在当局改变时标记列表中的用法。 这是一个很好的例子Implementation of singleton thread-safe list

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

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