当前位置 博文首页 > blackball1998的博客:解决跨域问题
有时候我们通过浏览器发送请求时,会碰到这样一个错误
been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource
这是浏览器为了安全禁止非同源访问引起的跨域问题,跨域问题可以通过部署Nginx解决,也可以通过修改Spring MVC的配置解决
我们可以将@CrossOrigin
注解添加在Controller类上,这样Controller类下的所有接口就都实现跨域了
@RestController
@CrossOrigin
public class MyController {
}
@CrossOrigin
注解也可以添加在请求处理方法上,这样只对这个接口开启跨域功能
如果所有的Controller类下的接口都需要跨域,可以创建一个BaseController,在BaseController上添加@CrossOrigin
,然后所有的Controller都继承BaseController
我们也可以通过修改web配置来解决跨域问题,重写WebMvcConfigurer
接口的addCorsMappings
方法即可
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedHeaders("*")
.allowedMethods("GET", "POST", "DELETE", "PUT")
.allowCredentials(true)
.maxAge(3600);
}
}
配置中每个方法的作用如下
addMapping
方法绑定需要跨域的请求,使用通配符/**
绑定所有请求allowedOriginPatterns
绑定请求时Origins的具体值,使用通配符*
接受任意域名请求allowedHeaders
绑定请求头信息,使用通配符*
接受任意字段allowedMethods
绑定服务器支持的所有跨域请求方法,使用通配符*
接受任意请求类型allowCredentials
表示是否允许发送Cookie,默认不发送maxAge
表示本次预检请求的有限期,单位秒