20

我希望能够以编程方式注销所有登录的用户。您如何在某些事件中强制注销所有用户?

4

2 回答 2

18

首先在web.xml中定义HttpSessionEventPublisher

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

然后<session-management>在你的 spring security.xml 文件中定义。

现在,SessionRegistry在您的控制器方法中使用使所有会话无效。下面的代码检索所有活动会话。

List<SessionInformation> activeSessions = new ArrayList<SessionInformation>();
    for (Object principal : sessionRegistry.getAllPrincipals()) {
        for (SessionInformation session : sessionRegistry.getAllSessions(principal, false)) {
            activeSessions.add(session);
        }
    }

在每个活动会话上,您可以调用expireNow()方法使它们过期或失效。

于 2013-02-07T16:03:57.327 回答
0

Ketan 为您提供了您正在寻找的答案,如果您更改第二个 for 块并session.expireNow();改为使用,activeSessions.add(session);您最终将导致所有活动会话都过期。

于 2015-09-09T10:50:59.593 回答