我需要使(或踢)用户 session 无效。该应用程序仅限制用户登录每个容器只有一个用户。
我尝试从 session 注册表中调用 removeSessionInformation,它已完成以解锁用户。这样其他用户就可以使用被踢 session 的用户名登录。
但被踢出的用户的 SessionContextHolder 仍然存在。所以他们仍然有相同的权限访问 protected 页面。
如何从指定的 session 注册信息中使SessionContextHolder的Principal失效或移除?
ps:在我的旧应用程序中,我在 UserDomain (UserDetails) 中提供了一个变量来保存 HttpSession。当他们需要踢用户时,我只是使指定 UserDomain 的 HttpSession 无效。但是我不知道在 Spring 该怎么做(它更像是删除 SessionContextHolder 的主体而不是 HttpSession)。实现方式和spring中的SessionRegistryImpl几乎一样。
最佳答案
您可能想考虑 Spring Security 并发控制。您可以将其配置为限制每个用户的并发 session 数,并在超过该数量时使现有 session 过期(踢出)。
Spring Security Session Management
这是我们配置的一个片段(Spring 3):
<http>
...
<session-management>
<concurrency-control max-sessions="1"/>
</session-management>
...
</http>
关于java - 使 spring 安全 session 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4617854/