package com.ltkj.framework.security.handle; import java.io.IOException; import javax.annotation.Resource; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ltkj.db.DataSourceContextHolder; import com.ltkj.framework.web.service.TokenService; import com.ltkj.hosp.domain.DictHosp; import com.ltkj.hosp.service.IDictHospService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; import com.alibaba.fastjson2.JSON; import com.ltkj.common.constant.Constants; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.common.core.domain.model.LoginUser; import com.ltkj.common.utils.ServletUtils; import com.ltkj.common.utils.StringUtils; import com.ltkj.framework.manager.AsyncManager; import com.ltkj.framework.manager.factory.AsyncFactory; /** * 自定义退出处理类 返回成功 * * @author ltkj */ @Configuration public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { @Autowired private TokenService tokenService; @Resource private IDictHospService hospService; /** * 退出处理 * * @return */ @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { String hospId = request.getHeader("hospId"); if (StrUtil.isBlank(hospId) || hospId.equals("undefined")){ ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("退出成功"))); return; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(DictHosp::getCode,hospId); DictHosp hosp = hospService.getOne(wrapper); DataSourceContextHolder.setDataSourceKey(hosp.getDbname()); LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { String userName = loginUser.getUsername(); // 删除用户缓存记录 tokenService.delLoginUser(loginUser.getToken(), loginUser.getUser().getUserId()); // 记录用户退出日志 AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功",hosp.getDbname())); // AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, "退出成功"); } ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success("退出成功"))); } }