From 9d3bac822440d20b2110830bb8677b5aa4c510a7 Mon Sep 17 00:00:00 2001 From: cat_shark Date: Sun, 12 Jul 2026 13:43:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=9F=E4=B8=80=20WebMvc=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=EF=BC=8C=E5=90=88=E5=B9=B6=20dev/prod=20=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除 WebMvcDevConfig 和 WebMvcProdConfig 两个环境特定配置 - 新增统一的 WebMvcConfig,同时包含 CORS 和 SaToken 鉴权拦截器 - CORS 支持通配符 allowedOriginPatterns 与精确 origins 两种模式 - 合并后的配置对所有环境生效,简化部署 --- ...WebMvcDevConfig.java => WebMvcConfig.java} | 28 +++++++---- .../config/WebMvcProdConfig.java | 46 ------------------- 2 files changed, 18 insertions(+), 56 deletions(-) rename src/main/java/com/guo/learningprogresstracker/config/{WebMvcDevConfig.java => WebMvcConfig.java} (59%) delete mode 100644 src/main/java/com/guo/learningprogresstracker/config/WebMvcProdConfig.java diff --git a/src/main/java/com/guo/learningprogresstracker/config/WebMvcDevConfig.java b/src/main/java/com/guo/learningprogresstracker/config/WebMvcConfig.java similarity index 59% rename from src/main/java/com/guo/learningprogresstracker/config/WebMvcDevConfig.java rename to src/main/java/com/guo/learningprogresstracker/config/WebMvcConfig.java index 3572b05..38007dd 100644 --- a/src/main/java/com/guo/learningprogresstracker/config/WebMvcDevConfig.java +++ b/src/main/java/com/guo/learningprogresstracker/config/WebMvcConfig.java @@ -6,18 +6,16 @@ import cn.dev33.satoken.stp.StpUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.Arrays; -@Profile("dev") @Configuration -@Slf4j @RequiredArgsConstructor -public class WebMvcDevConfig implements WebMvcConfigurer { +@Slf4j +public class WebMvcConfig implements WebMvcConfigurer { private final CorsProperties corsProperties; @@ -35,11 +33,21 @@ public class WebMvcDevConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { - log.info("允许cors的地址配置:{}", Arrays.toString(corsProperties.getAllowedOrigins())); - registry.addMapping("/**") - .allowedOrigins(corsProperties.getAllowedOrigins()) - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("*") - .allowCredentials(null == corsProperties.getAllowCredentials() || corsProperties.getAllowCredentials()); + String[] origins = corsProperties.getAllowedOrigins(); + boolean hasWildcard = origins != null && Arrays.asList(origins).contains("*"); + log.info("允许cors的地址配置:{}", Arrays.toString(origins)); + if (hasWildcard) { + registry.addMapping("/**") + .allowedOriginPatterns("*") + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .allowCredentials(true); + } else { + registry.addMapping("/**") + .allowedOrigins(origins) + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .allowCredentials(corsProperties.getAllowCredentials() == null || corsProperties.getAllowCredentials()); + } } } diff --git a/src/main/java/com/guo/learningprogresstracker/config/WebMvcProdConfig.java b/src/main/java/com/guo/learningprogresstracker/config/WebMvcProdConfig.java deleted file mode 100644 index 4f45363..0000000 --- a/src/main/java/com/guo/learningprogresstracker/config/WebMvcProdConfig.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.guo.learningprogresstracker.config; - -import cn.dev33.satoken.context.SaHolder; -import cn.dev33.satoken.interceptor.SaInterceptor; -import cn.dev33.satoken.stp.StpUtil; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import java.util.Arrays; - -@Profile({"prod", "uat"}) -@Configuration -@RequiredArgsConstructor -@Slf4j -public class WebMvcProdConfig implements WebMvcConfigurer { - - private final CorsProperties corsProperties; - - @Override - public void addCorsMappings(CorsRegistry registry) { - log.info("允许cors的地址配置:{}", Arrays.toString(corsProperties.getAllowedOrigins())); - registry.addMapping("/**") - .allowedOrigins(corsProperties.getAllowedOrigins()) - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("*") - .allowCredentials(true); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new SaInterceptor(handle -> { - if ("OPTIONS".equalsIgnoreCase(SaHolder.getRequest().getMethod())) { - return; - } - StpUtil.checkLogin(); - })) - .addPathPatterns("/**") - .excludePathPatterns("/login"); - } - -}