| package com.ruoyi.system.filter; | 
|   | 
| import com.alibaba.fastjson.JSON; | 
| import com.ruoyi.account.api.feignClient.AppUserClient; | 
| import com.ruoyi.account.api.model.TAppUser; | 
| import com.ruoyi.common.core.constant.TokenConstants; | 
| import com.ruoyi.common.core.domain.R; | 
| import com.ruoyi.common.core.utils.StringUtils; | 
| import com.ruoyi.system.api.domain.SysUser; | 
| import com.ruoyi.system.api.feignClient.SysUserClient; | 
| import com.ruoyi.system.service.ISysUserService; | 
| import org.apache.logging.log4j.core.config.Order; | 
| import org.slf4j.Logger; | 
| import org.slf4j.LoggerFactory; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.context.annotation.Lazy; | 
| import org.springframework.http.HttpHeaders; | 
| import org.springframework.http.HttpStatus; | 
| import org.springframework.http.MediaType; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import javax.annotation.Resource; | 
| import javax.servlet.*; | 
| import javax.servlet.http.HttpServletRequest; | 
| import javax.servlet.http.HttpServletResponse; | 
| import java.io.IOException; | 
| import java.io.PrintWriter; | 
|   | 
| /** | 
|  * @author zhibing.pu | 
|  * @Date 2024/8/23 11:22 | 
|  */ | 
| @Order(-200) | 
| @Component | 
| public class AuthFilter implements Filter { | 
|     private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); | 
|      | 
|     @Lazy | 
|     @Resource | 
|     private AppUserClient appUserClient; | 
|      | 
|     @Lazy | 
|     @Resource | 
|     private ISysUserService sysUserService; | 
|      | 
|      | 
|     @Override | 
|     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { | 
|         HttpServletRequest request = (HttpServletRequest) servletRequest; | 
|         HttpServletResponse response = (HttpServletResponse) servletResponse; | 
|         String userid = request.getHeader("user_id"); | 
|         if(StringUtils.isEmpty(userid)){ | 
|             filterChain.doFilter(request, response); | 
|             return; | 
|         } | 
|         String userType = request.getHeader("user_type"); | 
|         //管理后台用户 | 
|         if ("system".equals(userType)) { | 
|             SysUser sysUser = sysUserService.getById(userid); | 
|             if(null == sysUser || "2".equals(sysUser.getDelFlag())){ | 
|                 log.error("[账户异常处理]请求账户id:{}", userid); | 
|                 unauthorizedResponse(response,"无效的账户"); | 
|                 return; | 
|             } | 
|             if("1".equals(sysUser.getStatus())){ | 
|                 log.error("[账户异常处理]请求账户id:{}", userid); | 
|                 unauthorizedResponse(response,"账户已被停用,请联系系统管理员!"); | 
|                 return; | 
|             } | 
|         } | 
|         //小程序用户 | 
|         if ("applet".equals(userType)) { | 
|             TAppUser appUser = appUserClient.getUserById(Long.valueOf(userid)).getData(); | 
|             if(null == appUser || appUser.getDelFlag() || 3 == appUser.getStatus()){ | 
|                 log.error("[账户异常处理]请求账户id:{}", userid); | 
|                 unauthorizedResponse(response,"无效的账户"); | 
|                 return; | 
|             } | 
|             if(2 == appUser.getStatus()){ | 
|                 log.error("[账户异常处理]请求账户id:{}", userid); | 
|                 unauthorizedResponse(response,"账户已被冻结,请联系系统管理员!"); | 
|                 return; | 
|             } | 
|         } | 
|         filterChain.doFilter(servletRequest, servletResponse); | 
|     } | 
|      | 
|      | 
|      | 
|     private void unauthorizedResponse(HttpServletResponse response, String msg) { | 
|         response.setStatus(HttpStatus.OK.value()); | 
|         response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE); | 
|         PrintWriter writer = null; | 
|         try { | 
|             writer = response.getWriter(); | 
|         } catch (IOException e) { | 
|             throw new RuntimeException(e); | 
|         } | 
|         writer.println(JSON.toJSONString(R.fail(msg))); | 
|         writer.flush(); | 
|         writer.close(); | 
|     } | 
|      | 
|      | 
|      | 
|     /** | 
|      * 获取请求token | 
|      */ | 
|     private String getToken(HttpServletRequest request) { | 
|         String token = request.getHeader(TokenConstants.AUTHENTICATION); | 
|         // 如果前端设置了令牌前缀,则裁剪掉前缀 | 
|         if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) { | 
|             token = token.replaceFirst(TokenConstants.PREFIX, StringUtils.EMPTY); | 
|         } | 
|         return token; | 
|     } | 
|      | 
|      | 
| } |