From c62ec58c827e780c4fb039f03149884c10ba0c52 Mon Sep 17 00:00:00 2001 From: Fancy <Fancy.fx@outlook.com> Date: 星期五, 27 十二月 2024 11:16:02 +0800 Subject: [PATCH] parse JWT --- pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/PmsWechatApplication.java | 92 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 91 insertions(+), 1 deletions(-) diff --git a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/PmsWechatApplication.java b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/PmsWechatApplication.java index fb472bb..3295c10 100644 --- a/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/PmsWechatApplication.java +++ b/pms-parent/pms-web-wechat/src/main/java/com/dy/pmsWechat/PmsWechatApplication.java @@ -1,19 +1,109 @@ 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 MyModuleConfig { + + @Bean + public FilterRegistrationBean<LoginCheckFilter> myCustomFilter() { + FilterRegistrationBean<LoginCheckFilter> registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new LoginCheckFilter()); + registrationBean.addUrlPatterns("/myModule/*"); + 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; // 鏂规硶缁撴潫锛屽悗缁�昏緫涓嶅啀鎵ц + } + + // 瑙f瀽浠ょ墝 + try { + JwtUtil.parseJWT(secretKey,jwt); // 灏濊瘯瑙f瀽浠ょ墝锛岄獙璇佸叾鍚堟硶鎬� + } 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); + } + } + } -- Gitblit v1.8.0