【Spring Security】 登出
【Spring Security】 登出
Metadata
title: 【Spring Security】 登出
date: 2023-02-02 14:53
tags:
- 行动阶段/完成
- 主题场景/组件
- 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
- 细化主题/Module/SpringSecurity
categories:
- SpringSecurity
keywords:
- SpringSecurity
description: 【Spring Security】 登出
【Spring Security】 登出
之前我们了解到,spring security 提供了登录页面,那么是否也提供了登录退出页面呢?答案是肯定的,我们只要输入 http://localhost:9090/logout ,就出现了登录退出页面。
当点击了退出后,跳转到了登录页。
登录退出的配置类为 LogoutConfigurer,在 HttpSecurity 配置加载时,会创建该配置项。
// HttpSecurity 代码片段
public LogoutConfigurer<HttpSecurity> logout() throws Exception {
return getOrApply(new LogoutConfigurer<>());
}
LogoutConfigurer 核心配置如下:
public final class LogoutConfigurer<H extends HttpSecurityBuilder<H>>
extends AbstractHttpConfigurer<LogoutConfigurer<H>, H> {
// 退出时要执行的处理器,可以有多个, contextLogoutHandler 总是最后一个
private List<LogoutHandler> logoutHandlers = new ArrayList<>();
private SecurityContextLogoutHandler contextLogoutHandler = new SecurityContextLogoutHandler();
// 成功退出登录跳转路径
private String logoutSuccessUrl = "/login?logout";
// 退出登录成处理器
private LogoutSuccessHandler logoutSuccessHandler;
// 退出登录页面路径
private String logoutUrl = "/logout";
private RequestMatcher logoutRequestMatcher;
// 是否允许所有
private boolean permitAll;
// 是否自定义成功登出
private boolean customLogoutSuccess;
}
可以自定义退出功能:
@Override
protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() //... .
and() .logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login‐view?logout")
.logoutSuccessHandler(logoutSuccessHandler)
.addLogoutHandler(logoutHandler)
.invalidateHttpSession(true);
}
当退出操作出发时,将发生:
- 使 HTTP Session 无效
- 清除 SecurityContextHolder
- 跳转到 /login-view?logout
LogoutHandler 接口定义了退出的相关操作。
public interface LogoutHandler {
/**
* Causes a logout to be completed. The method must complete successfully.
*
* @param request the HTTP request
* @param response the HTTP response
* @param authentication the current principal details
* 导致注销完成。该方法必须成功完成
*/
void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication);
}
LogoutHandler 的实现类如下图:
- PersistentTokenBasedRememberMeServices 基于持久化 token 的 RememberMe 功能的相关清理
- TokenBasedRememberMeService 基于 token 的 RememberMe 功能的相关清理
- CookieClearingLogoutHandler 退出时 Cookie 的相关清理
- CsrfLogoutHandler 负责在退出时移除 csrfToken
- SecurityContextLogoutHandler 退出时 SecurityContext 的相关清理
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论