Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring security中注销所有已登录的用户?_Java_Spring_Authentication_Spring Security_Logout - Fatal编程技术网

Java 如何在spring security中注销所有已登录的用户?

Java 如何在spring security中注销所有已登录的用户?,java,spring,authentication,spring-security,logout,Java,Spring,Authentication,Spring Security,Logout,我希望能够以编程方式注销所有已登录的用户。如何在某个事件上强制注销所有用户?首先在web.xml中定义HttpSessionEventPublisher <listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </listener> 在每个活动会话上,您可以调用expireN

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

首先在web.xml中定义HttpSessionEventPublisher

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

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

如果您更改第二个for块并使用
session.expireNow(),Ketan将为您提供所需的答案改为
activeSessions.add(session)所有活动会话都将过期。

@Maksym Demidas如何通过会话信息获取会话?答案只描述了如何获取活动会话的信息,但没有描述如何使其无效。@gstackoverflow在Servlet API中无法通过会话信息获取会话(这是一个很好的理由-这不是一个安全的操作)。如果你真的需要它,你可以尝试手动解决()@Maksym Demidas实际上我搜索了以下信息:答案只描述了如何获取有关活动会话的信息,但没有描述如何使它们无效。@gstackoverflow-答案是call
expireNow()
在活动会话上导致注销。您在寻找其他内容吗?@Neil Smithline对如何获取此会话保持沉默。因此,答案不完整,因此作者不接受。我在哪里可以找到会话?如果仔细阅读Ketan的示例代码,您会发现
会话
是从
会话r获得的egistry.getAllSessions
方法。请注意并仔细查看返回类型您指的是什么返回类型?
getAllSessions
返回
列表
并在
SessionInformation
上使用
expireNow()使会话过期
方法。对不起,我不明白重点。首先,你没有找到
会话
,然后你无法访问会话,现在这是一个筛选器问题。如果你想结束,请问最后一个问题。我想你的问题已经得到了回答。当然,正如你所说,会话稍后将被筛选器删除,但是你得到了答案会话被删除。如果你认为我错了,我道歉。
List<SessionInformation> activeSessions = new ArrayList<SessionInformation>();
    for (Object principal : sessionRegistry.getAllPrincipals()) {
        for (SessionInformation session : sessionRegistry.getAllSessions(principal, false)) {
            activeSessions.add(session);
        }
    }