|  |  | 
 |  |  | package com.dy.pmsWechat; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson2.JSON; | 
 |  |  | import com.dy.common.webUtil.BaseResponse; | 
 |  |  | import com.dy.common.webUtil.BaseResponseUtils; | 
 |  |  | import com.dy.pmsWechat.util.JwtUtil; | 
 |  |  | import jakarta.servlet.*; | 
 |  |  | import jakarta.servlet.http.HttpServletRequest; | 
 |  |  | import jakarta.servlet.http.HttpServletResponse; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.mybatis.spring.annotation.MapperScan; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.boot.SpringApplication; | 
 |  |  | import org.springframework.boot.autoconfigure.SpringBootApplication; | 
 |  |  | import org.springframework.boot.web.servlet.FilterRegistrationBean; | 
 |  |  | import org.springframework.context.annotation.Bean; | 
 |  |  | import org.springframework.context.annotation.ComponentScan; | 
 |  |  | import org.springframework.context.annotation.Configuration; | 
 |  |  | import org.springframework.context.annotation.EnableAspectJAutoProxy; | 
 |  |  |  | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.io.PrintWriter; | 
 |  |  |  | 
 |  |  | @SpringBootApplication | 
 |  |  | @EnableAspectJAutoProxy | 
 |  |  | @ComponentScan(basePackages = {"com.dy.common", "com.dy.pmsGlobal", "com.dy.pmsWechat"}) | 
 |  |  | @MapperScan(basePackages={"com.dy.pmsGlobal.dao*"}) | 
 |  |  | public class PmsWechatApplication { | 
 |  |  |  | 
 |  |  |     public static void main(String[] args) { | 
 |  |  |         SpringApplication.run(PmsWechatApplication.class, args); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Configuration | 
 |  |  |     public static class WechatModuleConfig { | 
 |  |  |  | 
 |  |  |         @Bean | 
 |  |  |         public FilterRegistrationBean<LoginCheckFilter> wechatFilter() { | 
 |  |  |             FilterRegistrationBean<LoginCheckFilter> registrationBean = new FilterRegistrationBean<>(); | 
 |  |  |             registrationBean.setFilter(new LoginCheckFilter()); | 
 |  |  |             registrationBean.addUrlPatterns("/wechat/*"); | 
 |  |  |             registrationBean.setOrder(1); | 
 |  |  |             return registrationBean; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     @Slf4j | 
 |  |  |     public static class LoginCheckFilter implements Filter { | 
 |  |  |         @Value("${wechat.jwt.secret-key}") | 
 |  |  |         private String secretKey; | 
 |  |  |         @Override | 
 |  |  |         public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | 
 |  |  |                 throws IOException, ServletException { | 
 |  |  |             HttpServletRequest req = (HttpServletRequest) request; | 
 |  |  |             HttpServletResponse resp = (HttpServletResponse) response; | 
 |  |  |             String url = req.getRequestURI().toString(); | 
 |  |  |             // 在这里编写过滤器逻辑 | 
 |  |  |             if (url.contains("login")) { | 
 |  |  |                 chain.doFilter(request, response); // "登录操作,放行" 放行请求,继续执行后续过滤器链或目标资源 | 
 |  |  |                 return; // 方法结束,后续逻辑不再执行 | 
 |  |  |             } | 
 |  |  |             // 获取请求头中的 "token" 值 | 
 |  |  |             String jwt = req.getHeader("token"); | 
 |  |  |             // 如果请求头中没有 "token",返回未登录错误信息 | 
 |  |  |             if (jwt == null || jwt.trim().isEmpty()) { // 使用 Spring 的 StringUtils 检查 jwt 是否为空 | 
 |  |  |                 PrintWriter pw = null ; | 
 |  |  |                 try { | 
 |  |  |                     BaseResponse<?> res = BaseResponseUtils.buildToLogin(); | 
 |  |  |                     String jsonString = JSON.toJSONString(res); | 
 |  |  |                     response.setCharacterEncoding("UTF-8"); | 
 |  |  |                     response.setContentType("application/json; charset=utf-8"); | 
 |  |  |                     pw = response.getWriter() ; | 
 |  |  |                     pw.write(jsonString); | 
 |  |  |                     pw.flush(); | 
 |  |  |                 } catch (IOException e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 }finally { | 
 |  |  |                     if(pw != null){ | 
 |  |  |                         pw.close(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 return; // 方法结束,后续逻辑不再执行 | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 解析令牌 | 
 |  |  |             try { | 
 |  |  |                 JwtUtil.parseJWT(secretKey,jwt); // 尝试解析令牌,验证其合法性 | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 PrintWriter pw = null ; | 
 |  |  |                 try { | 
 |  |  |                     BaseResponse<?> res = BaseResponseUtils.buildToLogin(); | 
 |  |  |                     String jsonString = JSON.toJSONString(res); | 
 |  |  |                     response.setCharacterEncoding("UTF-8"); | 
 |  |  |                     response.setContentType("application/json; charset=utf-8"); | 
 |  |  |                     pw = response.getWriter() ; | 
 |  |  |                     pw.write(jsonString); | 
 |  |  |                     pw.flush(); | 
 |  |  |                 } catch (IOException ex) { | 
 |  |  |                     ex.printStackTrace(); | 
 |  |  |                 }finally { | 
 |  |  |                     if(pw != null){ | 
 |  |  |                         pw.close(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 return; // 方法结束,后续逻辑不再执行 | 
 |  |  |             } | 
 |  |  |             chain.doFilter(request, response); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |