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 配置可以减少浏览器的预检请求次数,提高性能。
相关推荐
派星38 分钟前
Jetson Orin Nano连接CSI摄像头并实现Gstreamer推流
人工智能·后端
kybs19911 小时前
springboot租车系统--附源码68701
java·hadoop·spring boot·python·django·asp.net·php
欧雷殿1 小时前
跨设备自动化:家庭 AI 工作台的首个小目标
后端·agent·aiops
过期动态1 小时前
MySQL中的约束
android·java·数据库·spring boot·mysql
wxin_VXbishe1 小时前
springboot新能源车充电站管理系统小程序-计算机毕业设计源码29213
java·c++·spring boot·python·spring·django·php
SsunmdayKT2 小时前
前后端项目部署与运行机制全流程详解
前端·后端
Reart2 小时前
从0解构tinyWeb项目--(Day:10)
前端·后端·架构
代码漫谈2 小时前
一文学习 SpringBoot 的 application.yml 配置,基于 Spring Boot 3.2.x
java·spring boot·spring·配置文件
SamDeepThinking2 小时前
程序员如何接受工作内容毫无意义?
java·后端·程序员
_Evan_Yao2 小时前
一文搞懂:AI编程辅助工具——从GitHub Copilot到通义灵码,不同人群如何驾驭AI编程助手?
人工智能·后端·copilot·ai编程