假设在一个应用程序中我们有接口(UI)来分配角色。
第一种情况:
所以说user A
是谁normal user
。一位管理员使用UI为其分配ADMIN
个角色。
现在,当user A
登录应用程序时,他可以看到ADMIN可以访问的所有选项卡。
第二种情况:
在同一时间(当他登录并拥有具有ADMIN角色的会话时),admin会将用户A设为normal USER
并拥有正常权限。
但是当他以ADMIN身份登录时,他可以访问所有选项卡的所有管理员信息,因为在此会话中他具有ADMIN角色。
我如何解决这个问题?
答案 0 :(得分:1)
第一种方法是在运行中使任何现有的用户会话到期。 以下帖子介绍了两种备选方案Is it possible to invalidate a spring security session?
更复杂的方法是在当局改变时标记列表中的用法。 这是一个很好的例子Implementation of singleton thread-safe list
此外,如果添加自定义弹簧安全过滤器,该过滤器将检查用户是否在列表中,并在必要时重新验证用户。我会使用switchuserfilter作为参考实现。您无需切换用户,而是创建新的身份验证对象并更新SecurityContextHolder。
中