SpringBoot/SpringMVC设置CORS跨域

CORS跨域

Cross-Origin-Recource-Sharing

SpringBoot 或者 SpringMVC

设置请求头, 请求方法, 允许跨域

同源策略

同源策略代表浏览器默认只允许协议, 域名和端口号一致的页面之间相互访问. 本质上是一种安全策略

而违背此策略就是跨域, 官方推荐的解决方案就是使用CORS进行跨域

方法1 - @CrossOrigin 注解

这个注解里可以设置属性:

value表示想要支持哪个域的请求

  • @CrossOrigin(value ="http://localhost:5000")

maxAge表示请求有效期, 比如当DELETE或者PUT等特殊请求, 在执行前会先执行探测请求. 在有效期范围内, 下次就不用再次执行探测请求, 单位是秒s

allowedHeaders 表示支持的请求头, *表示所有请求头

在方法上面使用: 代表此方法所有类都支持跨域

1
2
3
4
@CrossOrigin
public class TestController {

}

也可以在某一个方法上面使用: 代表此方法支持跨域

1
2
3
4
@CrossOrigin
public void TestMethod {

}

方法2 - 实现WebMvcConfigurer类

通过实现WebMvcConfigurer实现全局跨域配置

并在该配置类上加上@Configuration注解

实现该类中的addCorsMappings方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
//对那些请求路径支持跨域处理
registry.addMapping("/**")
//允许的请求头,默认允许所有的请求头
.allowedHeaders("*")
//允许的方法,默认允许GET、POST、HEAD
.allowedMethods("*")
//探测请求的有效期,单位是秒
.maxAge(1800)
//支持哪个域, 也可以使用 * 表示支持所有域
.allowedOrigins("http://localhost:5000");
}

}

需要注意的是正常的SpringMVC项目可能不支持此方法进行全局设置, 需要使用方法3

方法3 - 修改SpringMVC配置文件

在SpringMVC配置下, 修改SpringMVC配置文件, 适用于Spring+SpringMVC+MyBatis整合项目

需要添加的配置文件如下:

1
2
3
4
5
6
<mvc:cors>
<mvc:mapping path="/**"
allowed-origins="*"
allowed-methods="GET,POST,PUT,POST,DELETE"
max-age="1800" />
</mvc:cors>
Author: klenq
Link: https://klenq.github.io/2021/11/15/SpringBoot设置CORS跨域/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.