概述
以往遇到跨域问题的时候,一般采用Nginx 的反向代理功能。本文记录「后端层面(Spring)解决该问题」。
代码
为单个 Controller 解决
添加 @CrossOrigin 注解即可。
实现WebMvcConfigurer接口解决
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
/**
* addMapping 适用于所有的接口
* allowedOrigins 适用于所有的地址
* allowedHeaders 允许自定义请求头
* allowedMethods 适用于所有请求方式
* allowCredentials 允许携带验证
* maxAge 允许时间
*
*/
registry.addMapping("/**")
.allowedOrigins("*")
.allowedHeaders(CorsConfiguration.ALL)
.allowedMethods(CorsConfiguration.ALL)
.allowCredentials(true)
.maxAge(3600);
}
}
其他场景
以上可以解决大部分的跨域问题,但当在 SpringCloud 中应用 gateway 的时候就出现了无效的问题。
经过测试,是被 gateway 拦截的,我一直纠结是不是实现的WebMvcConfigurer 接口出现了问题,耽误了很长时间。网络上的文章也是抄来抄去,实际上并不可用。
之所以被 gateway 拦截是因为它并不属于 SpringMVC 而是 webflux,所以上面关闭 CORS 的方式对它无效,需要去关闭它的 CORS。
spring:
application:
name: gateway
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "*"
allowedMethods: "*"
allowedHeaders: "*"
本页的评论功能已关闭