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,不能使用 \*,必须指定域名。
    • 可使用 CorsFilterWebMvcConfigurer 配置。
  • 高版本(≥2.4)
    • allowedOriginPatterns("*") 支持通配符 + Cookie。
    • 推荐统一使用 WebMvcConfigurerCorsFilter 配置。

💡 小贴士:

  • 在 2.4 之前版本前端请求时是否需要携带 Cookie,决定了是否可以使用 *
  • maxAge 配置可以减少浏览器的预检请求次数,提高性能。
相关推荐
计算机毕设定制辅导-无忧学长3 小时前
《基于SpringBoot的马术俱乐部管理系统》
java·spring boot·后端
摇滚侠3 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 JDBC 事务管理 阅读笔记 33
spring boot·笔记·后端
学长毕业设计3 小时前
基于SpringBoot的民间艺术传承管理系统(源码+文档+讲解视频)
java·spring boot·后端
小蒜学长3 小时前
基于Springboot+Vue的环保行动志愿者招募系统设计与实现(代码+数据库+LW)
java·数据库·vue.js·spring boot·后端
用户233376852184 小时前
Ubuntu上fpm多架构打包实战
后端
JavaGuide4 小时前
轻量开源版 IDEA 来了!
前端·后端
Json____4 小时前
springboot开发高校选课管理系统:从零构建前后端分离的全栈实践
java·spring boot·后端·毕业设计·毕设·wwwoop.com
站大爷IP5 小时前
Python的列表推导式把我写崩了,原来圆括号和方括号不是一回事
后端
xcl09255 小时前
民宿预约系统开发实战:从需求分析到上线部署全流程解析
java·spring boot
梦在远山后5 小时前
Python 中字符串常用写法
人工智能·后端