springsecurity退出登陆
# 默认退出登陆处理逻辑
Spring Security的退出登陆功能由LogoutFilter
过滤器拦截处理,默认的退出登陆url为 /logout
。
在退出登陆时会做如下几件事:
1、使当前session失效 2、清除当前用户的remember-me记录 3、清空当前的SecurityContext 4、重定向到登录界面
# 与退出登陆相关的配置
# 在配置文件里自定义退出登陆的一些处理逻辑
.and()
//退出登陆相关的逻辑
.logout()
//自定义退出的url---默认的为/logout
.logoutUrl("/signOut")
//自定义退出成功处理器
.logoutSuccessHandler(logoutSuccessHandler)
//自定义退出成功后跳转的url与logoutSuccessHandler互斥
//.logoutSuccessUrl("/index")
//指定退出成功后删除的cookie
.deleteCookies("JSESSIONID")
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 对涉及到的URL进行授权
//配置不用进行认证校验的url
.antMatchers(
SecurityConstants.DEFAULT_UNAUTHENTICATION_URL,
SecurityConstants.DEFAULT_LOGIN_PROCESSING_URL_MOBILE,
nrscSecurityProperties.getBrowser().getLoginPage(),
SecurityConstants.DEFAULT_VALIDATE_CODE_URL_PREFIX + "/*",
nrscSecurityProperties.getBrowser().getSignUpUrl(),
//session失效默认的跳转地址
nrscSecurityProperties.getBrowser().getSession().getSessionInvalidUrl(),
//获取第三方账号的用户信息的默认url
SecurityConstants.DEFAULT_GET_SOCIAL_USERINFO_URL,
//退出登陆默认跳转的url
nrscSecurityProperties.getBrowser().getSignOutUrl(),
"/user/register",
"/js/**"
)
.permitAll()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 自定义的退出成功处理器
package com.nrsc.security.browser.logout;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.nrsc.security.utils.ResultVOUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.Result;
import java.io.IOException;
/**
* @author : Sun Chuan
* @date : 2019/9/22 12:00
* Description:退出成功处理器
*/
@Slf4j
public class NRSCLogoutSuccessHandler implements LogoutSuccessHandler {
/**
* 退出登陆url
* 可以在yml或properties文件里通过nrsc.security.browser.signOutUrl 进行指定
* 我指定的默认值为"/" --- 因为如果不指定一个默认的url时,配置授权那一块会报错
*/
private String signOutSuccessUrl;
private ObjectMapper objectMapper = new ObjectMapper();
public NRSCLogoutSuccessHandler(String signOutSuccessUrl) {
this.signOutSuccessUrl = signOutSuccessUrl;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
log.info("退出成功");
//如果没有指定退出成功的页面则返回前端一个json字符串
if (StringUtils.equalsIgnoreCase("/",signOutSuccessUrl)) {
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(objectMapper.writeValueAsString(ResultVOUtil.success("退出成功")));
} else {
//重定向到退出成功登陆页面
response.sendRedirect(signOutSuccessUrl);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 高阶用法
参考文章
spring-security退出登陆_nrsc-CSDN博客_security退出登录 (opens new window)
SpringBoot+Spring Security退出登录/自定义退出 - 心田已荒的个人空间 - OSCHINA - 中文开源技术交流社区 (opens new window)