一尘不染

是否可以使Spring Security会话无效?

spring-mvc

我正在使用Tomcat 6.0.32,Spring Security 3.0.5

在我的Web应用程序中,某些用户可以更改其他用户的权限。发生这种情况时,我想使特权已更改的用户的任何会话无效。这有可能吗?


阅读 303

收藏
2020-06-01

共1个答案

一尘不染

通常,您不能在不借助容器特定的API的情况下立即更改用户帐户信息而使用户会话无效,因为访问对象的唯一方法HttpSession是通过HttpServletRequest对象。

相反,您可以将用户名缓存在内存中,然后在过滤器或custom中查询用户名AccessDecisionVoter。在用户表中使用标记并不是一个好主意,因为该标记本质上是瞬态的(在服务器重启后不相关),最好避免对每个请求的数据库查询性能造成影响。

有一篇博客文章介绍了如何使用自定义投票者。它已经过时了,但是一般的方法是合理的。

另一种方法是使用Spring Security
SessionRegistry,它是会话管理功能的一部分。通常,这用于限制用户可以拥有的会话数,但也可以用于列出当前经过身份验证的用户或将其会话标记为过期。

只是重新加载用户的特权,而不是完全注销它们,这也是一个想法。

2020-06-01