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
52
package com.yiboshi.science.config.security;
import cn.hutool.core.util.StrUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.web.authentication.logout.ForwardLogoutSuccessHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author qyh
* 退出登录后清除token
*/
public class UserLogoutSuccessHandler extends ForwardLogoutSuccessHandler {
static Logger logger = LoggerFactory.getLogger(UserLogoutSuccessHandler.class);
private TokenStore tokenStore;
/**
* Construct a new {@link ForwardLogoutSuccessHandler} with the given target URL.
*
* @param targetUrl the target URL
*/
public UserLogoutSuccessHandler(String targetUrl,TokenStore tokenStore) {
super(targetUrl);
this.tokenStore=tokenStore;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
String accessToken = request.getParameter("access_token");
logger.info("清除token:" + accessToken);
if (StrUtil.isNotBlank(accessToken)) {
OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessToken);
if (oAuth2AccessToken != null) {
tokenStore.removeAccessToken(oAuth2AccessToken);
OAuth2RefreshToken oAuth2RefreshToken = oAuth2AccessToken.getRefreshToken();
tokenStore.removeRefreshToken(oAuth2RefreshToken);
tokenStore.removeAccessTokenUsingRefreshToken(oAuth2RefreshToken);
}
}
super.onLogoutSuccess(request, response, authentication);
}
}