我正在使用 Tomcat 6.0.32,Spring Security 3.0.5
在我的网络应用程序中,一些用户可以更改其他用户的权限。发生这种情况时,我想使权限已更改的用户的任何 session 无效。这可能吗?如果可能的话如何?
最佳答案
如果不求助于特定于容器的 API,您通常无法在更改用户帐户信息后立即使用户 session 无效,因为访问 HttpSession
的唯一方法是通过 HttpServletRequest
对象。
相反,您可以将用户名缓存在内存存储中,并在过滤器或自定义 AccessDecisionVoter
中查询它。在用户表中使用标志并不是一个好主意,因为标志本质上是暂时的(在服务器重新启动后它是无关紧要的)并且最好避免对每个请求的数据库查询性能影响。
有一个 blog article on using custom voters对于这种事情。它已经过时了,但一般方法是合理的。
另一种方法是使用 Spring Security 的 SessionRegistry
,它是 session 管理功能的一部分。通常这用于限制用户可以拥有的 session 数,但也可以用于 list currently authenticated users或将他们的 session 标记为过期。
重新加载用户的权限而不是完全注销也可能是一个想法。
关于spring - 是否可以使 spring 安全 session 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478188/