traffic-audit-server/src/main/java/com/trafficaudit/common/config/CorsConfig.java
@@ -1,22 +1,48 @@
package com.trafficaudit.common.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Arrays;
import java.util.List;
/**
 * 跨域配置:只允许配置中列出的来源(支持 * 通配)访问接口。
 * 浏览器发起 POST/PUT/DELETE 时会带 Origin 头(GET 不带),因此用局域网 IP 打开页面时,
 * 若该来源不在放行列表内会被 CorsFilter 判为非法并返回 403,表现为登录时提示“网络错误”。
 * 默认放行本机与内网网段的任意端口(本地开发、局域网访问、IP 方式访问 8090 同源部署都覆盖)。
 * 注意:不开启 allowCredentials(接口用 Bearer 令牌鉴权,不依赖 Cookie),避免任意站点携带凭证调用。
 */
@Configuration
public class CorsConfig {
    @Value("${app.cors.allowed-origins:http://localhost:*,http://127.0.0.1:*,http://192.168.*:*,http://10.*:*,http://172.*:*}")
    private String allowedOrigins;
    private List<String> originList() {
        return Arrays.asList(allowedOrigins.split(","));
    }
    @Bean
    public CorsFilter corsFilter() {
    public CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOriginPattern("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        config.setAllowedOriginPatterns(originList());
        config.setAllowedHeaders(Arrays.asList("Authorization", "Content-Type", "Accept", "X-Requested-With"));
        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        config.setAllowCredentials(false);
        config.setMaxAge(3600L);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
        return source;
    }
    @Bean
    public CorsFilter corsFilter() {
        return new CorsFilter(corsConfigurationSource());
    }
}