package com.kidgrow.oauth2.handler;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.kidgrow.authclient.util.AuthUtils;
|
import com.kidgrow.redis.util.RedisUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
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.LogoutHandler;
|
import org.springframework.util.Assert;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
/**
|
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
|
*
|
* @Description: <br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/20 09:58 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
@Slf4j
|
public class OauthLogoutHandler implements LogoutHandler {
|
@Autowired
|
private TokenStore tokenStore;
|
@Autowired
|
private RedisUtils redisUtils;
|
|
@Override
|
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
|
|
Assert.notNull(tokenStore, "tokenStore must be set");
|
String token = request.getParameter("token");
|
if (StrUtil.isEmpty(token)) {
|
token = AuthUtils.extractToken(request);
|
}
|
if(StrUtil.isNotEmpty(token)){
|
OAuth2AccessToken existingAccessToken = tokenStore.readAccessToken(token);
|
OAuth2RefreshToken refreshToken;
|
if (existingAccessToken != null) {
|
if (existingAccessToken.getRefreshToken() != null) {
|
log.info("remove refreshToken!", existingAccessToken.getRefreshToken());
|
refreshToken = existingAccessToken.getRefreshToken();
|
tokenStore.removeRefreshToken(refreshToken);
|
}
|
log.info("remove existingAccessToken!", existingAccessToken);
|
tokenStore.removeAccessToken(existingAccessToken);
|
}
|
}
|
}
|
}
|