14_Spring Boot 跨域(CORS)处理指南

14_Spring Boot 跨域(CORS)处理指南

在前后端分离的项目中,跨域请求(CORS)问题几乎是必然遇到的。本文将从 Spring Boot 版本判断 到 不同版本的跨域配置方式,做一个系统整理。


1️⃣ 查看 Spring Boot 版本

在 pom.xml 中可以查看 Spring Boot 的父级依赖版本:

xml 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.4</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

2️⃣ Spring Boot < 2.4 的跨域处理

2.1 使用 CorsFilter 配置

java 复制代码
@Configuration
public class CorsFilterConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 指定允许的域名(* 表示所有,但如果要携带 Cookie,不可使用 *)
        config.addAllowedOrigin("http://192.168.3.190");
        config.setAllowCredentials(true); // 是否允许发送 Cookie
        config.addAllowedMethod("*");     // 允许所有请求方法
        config.addAllowedHeader("*");     // 允许所有请求头
        config.setMaxAge(3600L);          // 预检请求缓存时间(秒)

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config); // 对所有请求应用配置

        return new CorsFilter(source);
    }
}

2.2 使用 WebMvcConfigurer 配置

java 复制代码
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://192.168.3.190") // 支持通配符
                .allowedMethods("*")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

⚠️ 如果前端不需要携带 Cookie,可以允许所有来源。true 和 * 不能同时使用!!!

java 复制代码
.allowedOrigins("*")
.allowCredentials(false)

3️⃣ Spring Boot ≥ 2.4 的跨域处理

Spring Boot 2.4 后,引入了 allowedOriginPatterns,解决了 * 与 allowCredentials(true) 冲突的问题。

3.1 WebMvcConfigurer 示例

java 复制代码
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*") // 支持通配符
                .allowedMethods("*")
                .allowedHeaders("*")
                .allowCredentials(true)     // 支持 Cookie
                .maxAge(3600);
    }
}

3.2 CorsFilter 示例

java 复制代码
@Configuration
public class CorsFilterConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOriginPattern("*"); // Spring Boot 2.4+ 支持通配符
        config.setAllowCredentials(true);
        config.addAllowedMethod("*");
        config.addAllowedHeader("*");
        config.setMaxAge(3600L);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsFilter(source);
    }
}

4️⃣ 总结

  • 低版本(<2.4) :
    • 如果要携带 Cookie,不能使用 \*,必须指定域名。
    • 可使用 CorsFilter 或 WebMvcConfigurer 配置。
  • 高版本(≥2.4) :
    • allowedOriginPatterns("*") 支持通配符 + Cookie。
    • 推荐统一使用 WebMvcConfigurer 或 CorsFilter 配置。

💡 小贴士:

  • 在 2.4 之前版本前端请求时是否需要携带 Cookie,决定了是否可以使用 *。
  • maxAge 配置可以减少浏览器的预检请求次数,提高性能。
相关推荐
Rain的Java大神之路3 分钟前
10 万人抢 2000 个座位,电影票选座系统怎么防超卖?一文讲透大厂高频场景题
java·后端·面试
武子康5 分钟前
用户说“算了”,设备指令真的取消了吗?
人工智能·后端·agent
威哥爱编程11 分钟前
【AI全栈12-07】Spring Boot 用 Agent 自动完成多步运营任务
java·spring boot·后端
未秃头的程序猿15 分钟前
我用 Spring AI + MCP 把公司内部系统接给了 AI,过程没想象中顺利
java·后端
RuoyiOffice22 分钟前
SpringBoot3+Vue3 员工全生命周期:入转调离如何衔接账号、权限、资产与交接
spring boot·vue3·权限管理·员工管理·hrm·ruoyi office·人事变更
geovindu43 分钟前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式
郝学胜-神的一滴1 小时前
Web安全入门:读懂Web世界里的攻防
前端·网络·后端·安全·web安全·hibernate
天若有情6731 小时前
从零搭建校园二手交易系统:Vue2 + SpringBoot 4.x 全栈实战
java·spring boot·后端
省钱兄--zs1 小时前
碰碰好评卡系统开发实战指南 核心功能实现与部署落地全流程拆解
数据仓库·经验分享·spring boot·小程序·架构
Lost of 程序猿1 小时前
责任链模式实战:审批流里“层层把关“的艺术
后端·设计模式·asp.net·责任链模式