「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」
作者:汤圆
个人博客:javalover.cc
简介
前面我们介绍了表单登录的入门案例;
本篇介绍下表单退出登录的入门案例,代码基于表单登录的案例进行了修改;
代码地址见文末
目录
- 退出登录的基本配置
- 退出登录的相关跳转
- 退出登录时的缓存更新
- 退出登录时的处理器
正文
1. 退出登录的基本配置
最基本的配置如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 退出登录 所有用户都可以访问
.logout().permitAll();
}
复制代码
这里默认的退出登录url为/logout
,通过在url中访问http://localhost:8090/logout
就可以退出登录了。
当然最方便的还是在界面中进行链接跳转,如下所示:
<a href="logout">退出</a>
复制代码
2. 退出登录的相关跳转
logoutSuccessUrl配置:
退出登录跳转成功后的默认界面是根路径,比如http://localhost:8090/
;
下面我们可以进行简单的配置,配置成自己指定的界面,如下所示:一般推荐将退出登录成功后跳转的链接设置为登录界面(习惯)
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 退出登录 所有用户都可以访问
.logout().permitAll()
.logoutSuccessUrl("/login");
}
复制代码
logoutUrl配置:
退出登录跳转的默认url为/logout
,比如http://localhost:8090/logout
,如果退出登录成功,就跳转到上面配置的路径;
配置如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 退出登录 所有用户都可以访问
.logout().permitAll()
.logoutUrl("/logout");
}
复制代码
3. 退出登录时的缓存更新
这里的缓存指的就是session和cookie;
在退出登录之后,需要将session失效处理,并删除对应的cookie;
对应的命令为:invalidateHttpSession()
和 deleteCookies(...name)
;
配置如下所示:
其中删除的Cookies名称为
JSESSIONID
,这个就是前后端交互的一个凭证id,是在第一次前端请求后端时,后端返回的id;后续的请求后端会根据JSESSIONID来匹配对应的session
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 退出登录 所有用户都可以访问
.logout().permitAll()
.logoutUrl("/logout")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID");
}
复制代码
4. 退出登录时的处理器
退出成功后,不仅可以设置特定的url,还可以执行一些自定义的操作;
对应的命令为:logoutSuccessHandler
比如我们需要记录退出登录时访问的最后一个界面,那么可以通过如下的代码来实现;
先定义一个处理器:CustomLogoutSuccessHandler.java
public class CustomLogoutSuccessHandler extends
SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(
HttpServletRequest request,
HttpServletResponse response,
Authentication authentication)
throws IOException, ServletException {
String refererUrl = request.getHeader("Referer");
System.out.println("Logout from: " + refererUrl);
super.onLogoutSuccess(request, response, authentication);
}
}
复制代码
然后在配置中注入该处理器,通过方法注入,如下所示:
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Bean
public LogoutSuccessHandler logoutSuccessHandler(){
return new CustomLogoutSuccessHandler();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 退出登录 所有用户都可以访问
.logout()
.permitAll()
.logoutSuccessUrl("/login")
.logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler());
}
}
复制代码
这样我们在退出登录时,就可以看到控制台打印下面的内容:
Logout from: http://localhost:8090/home
复制代码
总结
本篇介绍了退出登录的相关配置和处理;
配置有:
- logoutUrl(): 退出登录链接配置
- logoutSuccessUrl(): 退出登录成功后的跳转链接
- invalidateHttpSession: 失效session
- deleteCookies() : 删除对应cookie,多个cookieName逗号分隔
- LogoutSuccessHandler:退出登录时执行的相关操作