我正在使用 Tomcat 6.0.32,Spring Security 3.0.5
在我的网络应用程序中,某些用户可以更改其他用户的权限。发生这种情况时,我想使权限已更改的用户的任何会话无效。这可能吗?如果可能的话怎么办?
通常,您无法在更改用户帐户信息后立即使用户会话失效,而不求助于特定于容器的 API,因为访问该用户会话的唯一方法是HttpSession
是通过HttpServletRequest
object.
相反,您可以将用户名缓存在内存存储中,并在过滤器或自定义中查阅它AccessDecisionVoter
。在用户表中使用标志并不是一个好主意,因为该标志本质上是暂时的(服务器重新启动后不再相关),并且最好避免每个请求上的数据库查询的性能影响。
有一个关于使用自定义选民的博客文章 http://blog.springsource.org/2009/01/02/spring-security-customization-part-2-adjusting-secured-session-in-real-time/对于这种事情。它已经过时了,但总体方法是合理的。
另一种方法是使用 Spring SecuritySessionRegistry
这是会话管理功能的一部分。通常这用于限制用户可以拥有的会话数量,但也可以用于列出当前经过身份验证的用户 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/session-mgmt.html#list-authenticated-principals或将其会话标记为过期。
重新加载用户的权限而不是完全注销也可能是一个想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)