java - 使 spring 安全 session 无效

标签 java spring session spring-security invalidation

我需要使(或踢)用户 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/

相关文章:

java - Spring Boot 中的外部 YAML 属性文件和普通属性文件

php - $_Session 没有收集所有用户信息?

ASP.NET:如何删除所有用户的所有 session 变量?

java - 在 Spring 中销毁的 Session 上调用 Listener 类中的服务层函数

java - SQL 和 Java 返回不同的日期?

java - 是否可以在不事先声明的情况下将参数列表传递给方法?

Java何时捕获一般异常和特定异常

java - 带有集合参数的 Spring-Data @Query

使用静态字符串变量的 Java 类

java - Spring Boot 启用全局 CORS 支持问题 : only GET is working, POST、PUT 和 Delete 不起作用