【发布时间】:2019-01-30 13:54:02
【问题描述】:
我有一个实现了 spring 安全性的 Spring boot 应用程序。用户登录和注销成功工作,我正在使用 jdbc 进行会话存储。 现在我只想实现一个新的休息端点,它接受特定用户的用户名作为参数并注销该用户。 目前我正在使用以下类作为注销实现。
@Component
public class CustomLogoutHandler extends SecurityContextLogoutHandler {
@Override
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
super.logout(request, response, authentication);
}
}
但是我的问题是如何使用这个类或内置的 Spring logout 从外部请求中注销用户? 对于 session_store,我正在使用以下配置,并且用户会话已成功保存在数据库中。
#Spring Session
spring.session.store-type=jdbc
spring.session.jdbc.table-name= SESSION_TABLE
可以手动从表中删除表条目。它会注销用户。 但我想按照正确的 Spring 安全流程进行注销。
谢谢
【问题讨论】:
-
会话绑定到用户。所以只有用户可以注销。否则,您将需要劫持会话。所以删除表条目可能是你能做的最好的事情。
-
@SimonMartinelli 我们不能使用 sessionRegistry 来检索用户会话并使会话无效。 ?
-
你试过了吗?您可以遍历所有主体并在 SessionInformation 上调用 expireNow,然后从注册表中删除 SessionInformation。
标签: spring spring-mvc spring-boot spring-security spring-session