package com.monkeylessey.framework.security.handler; import com.fasterxml.jackson.databind.ObjectMapper; import com.monkeylessey.constant.RedisKeyPrefixConstants; import com.monkeylessey.sys.domain.vo.SysUserVO; import com.monkeylessey.response.Result; import com.monkeylessey.framework.utils.RedisUtil; import com.monkeylessey.framework.utils.TokenUtil; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; 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 java.io.IOException; /** * @author xp * @data 2023/4/6 */ @Configuration public class CustomLogoutSuccessHandler implements LogoutSuccessHandler { private final RedisUtil redisUtil; private final TokenUtil tokenUtil; public CustomLogoutSuccessHandler(RedisUtil redisUtil, TokenUtil tokenUtil) { this.redisUtil = redisUtil; this.tokenUtil = tokenUtil; } @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { SysUserVO user = tokenUtil.getCurrentUserInfo(request); // 清除redis中的token redisUtil.deleteKey(RedisKeyPrefixConstants.TOKEN_PREFIX + user.getId()); ObjectMapper objectMapper = new ObjectMapper(); Result result = Result.ok("操作成功"); response.setCharacterEncoding("utf-8"); response.getWriter().println(objectMapper.writeValueAsString(result)); response.setContentType(MediaType.APPLICATION_JSON_VALUE); } }