Jeg*_*gus 6 java session spring spring-security invalidation
我需要使用户会话无效(或踢).应用程序仅限制用户每个容器只登录一个用户.
我尝试从会话注册表调用removeSessionInformation,它完成了解锁用户.所以其他用户可以使用踢脚会话用户名登录.
但是被踢的那个用户的SessionContextHolder仍然是.所以他们仍然拥有访问受保护页面的相同权限.
如何从指定的会话注册表信息中失效或删除SessionContextHolder的Principal?
ps:在我的旧应用程序中,我在UserDomain(UserDetails)中提供了一个包含HttpSession的变量.当他们需要踢用户时,我只是从指定的UserDomain中使HttpSession无效.但我不知道如何在春天这样做(它更像是删除了SessionContextHolder的Principal而不是HttpSession).SessionRegistryImpl在Spring中的实现几乎与实现相同.
Cor*_*her 11
您可能想要考虑Spring Security Concurrency Control.您可以将其配置为限制每个用户的并发会话数,并在超过该数量时使现有会话到期(踢).
这是我们配置的片段(Spring 3):
<http>
...
<session-management>
<concurrency-control max-sessions="1"/>
</session-management>
...
</http>
Run Code Online (Sandbox Code Playgroud)
我猜这是做到这一点的方法:
SecurityContextHolder.getContext().setAuthentication(null)
Run Code Online (Sandbox Code Playgroud)
来自SecurityContext.setAuthentication(Authentication)Javadocs:
更改当前已验证的主体,或删除身份验证信息.
参数:authentication
- 新的身份验证令牌,如果不存储其他身份验证信息,则为null
您还可以执行以下操作以清除SpringSecurity会话:
SecurityContextHolder.clearContext()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20382 次 |
| 最近记录: |