| package com.ruoyi.framework.security.handle; | 
|   | 
| import java.io.IOException; | 
| import java.util.Locale; | 
| import javax.servlet.ServletException; | 
| import javax.servlet.http.HttpServletRequest; | 
| import javax.servlet.http.HttpServletResponse; | 
|   | 
| import com.ruoyi.common.utils.MessageUtils; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.context.annotation.Configuration; | 
| import org.springframework.context.i18n.LocaleContextHolder; | 
| import org.springframework.security.core.Authentication; | 
| import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; | 
| import com.alibaba.fastjson2.JSON; | 
| import com.ruoyi.common.constant.Constants; | 
| import com.ruoyi.common.core.domain.AjaxResult; | 
| import com.ruoyi.common.core.domain.model.LoginUser; | 
| import com.ruoyi.common.utils.ServletUtils; | 
| import com.ruoyi.common.utils.StringUtils; | 
| import com.ruoyi.framework.manager.AsyncManager; | 
| import com.ruoyi.framework.manager.factory.AsyncFactory; | 
| import com.ruoyi.framework.web.service.TokenService; | 
|   | 
| /** | 
|  * 自定义退出处理类 返回成功 | 
|  *  | 
|  * @author ruoyi | 
|  */ | 
| @Slf4j | 
| @Configuration | 
| public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler | 
| { | 
|     @Autowired | 
|     private TokenService tokenService; | 
|   | 
|     /** | 
|      * 退出处理 | 
|      *  | 
|      * @return | 
|      */ | 
|     @Override | 
|     public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) | 
|             throws IOException, ServletException | 
|     { | 
|         LoginUser loginUser = tokenService.getLoginUser(request); | 
|         if (StringUtils.isNotNull(loginUser)) | 
|         { | 
|             String userName = loginUser.getUsername(); | 
|             // 删除用户缓存记录 | 
|            // tokenService.delLoginUser(loginUser.getToken()); | 
|             // 删除用户缓存记录 | 
|             tokenService.delLoginUser(loginUser.getToken(), loginUser.getUser().getUserId()); | 
|             // 记录用户退出日志 | 
|             //国际化 | 
|             final String key = "language"; | 
|             String language = request.getHeader(key); | 
|             if (language == null) { | 
|                 //String language = "en-US"; | 
|                 language = "en-US"; | 
|             } | 
|             log.info("当前语言={}", language); | 
|             Locale locale = new Locale(language.split("-")[0], language.split("-")[1]); | 
|             LocaleContextHolder.setLocale(locale); | 
|             AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT,MessageUtils.message("user.logout.success"))); | 
|         } | 
|         ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("退出成功"))); | 
|     } | 
| } |