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); 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |