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 配置可以减少浏览器的预检请求次数,提高性能。
相关推荐
白宇横流学长24 分钟前
基于SpringBoot实现的冬奥会科普平台设计与实现【源码+文档】
java·spring boot·后端
Python编程学习圈1 小时前
Asciinema - 终端日志记录神器,开发者的福音
后端
bing.shao1 小时前
Golang 高并发秒杀系统踩坑
开发语言·后端·golang
壹方秘境1 小时前
一款方便Java开发者在IDEA中抓包分析调试接口的插件
后端
brzhang1 小时前
A2UI:但 Google 把它写成协议后,模型和交互的最后一公里被彻底补全
前端·后端·架构
开心猴爷2 小时前
iOS App 性能测试中常被忽略的运行期问题
后端
SHERlocked932 小时前
摄像头 RTSP 流视频多路实时监控解决方案实践
c++·后端·音视频开发
AutoMQ3 小时前
How does AutoMQ implement a sub-10ms latency Diskless Kafka?
后端·架构
Rover.x3 小时前
Netty基于SpringBoot实现WebSocket
spring boot·后端·websocket
疯狂的程序猴3 小时前
用 HBuilder 上架 iOS 应用时如何管理Bundle ID、证书与描述文件
后端