SpringCloud Gateway跨域CORS问题解决方案
最近使用SpringCloud搭建微服务,使用Gateway网关统一对外提供API接口,项目使用前后端分离,前端开发对接接口的时候抛出接口提示跨域问题不能调用。才注意到Gateway网关没有跨域相应的配置,默认情况下,是不允许任何跨源请求的,必须显式配置以指示应允许的内容。通过官网文档查阅、网上其他网友总结,最后使用官方文档描述的方法通过配置的方式解决了Gateway网关跨域的问题。spring:
最近使用SpringCloud搭建微服务,使用Gateway网关统一对外提供API接口,项目使用前后端分离,前端开发对接接口的时候抛出接口提示跨域问题不能调用。才注意到Gateway网关没有跨域相应的配置,默认情况下,网关是不允许任何跨源请求的,必须显式配置以指示应允许的内容。通过官网文档查阅、网上其他网友总结,衡量之后使用官方文档描述的方法通过配置的方式解决了Gateway网关跨域的问题。
方案一 通过application.yml配置CORS跨域
通过application.yml配置的方式是Gateway官方文档介绍的方式,截图如下。CORS的常用的配置项有allowedOrigins,allowedMethods,allowedHeaders,allowCredentials等,详细的配置项可以参考Spring Framework CorsConfiguration。
博主这边是使用的官方文档介绍的方式实现CORS跨域配置的,项目中Gateway的application.yml配置CORS示例如下:
spring:
cloud:
gateway:
discovery:
locator:
enabled: false #开启从注册中心动态创建路由的功能
lower-case-service-id: true #使用小写服务名,默认是大写
# CORS配置
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "*"
allowedMethods:
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
- OPTIONS
- PATCH
allowedHeaders: "*"
方案二 通过Java Bean代码配置CORS跨域
我们也可以在Java代码中通过Java Bean的方式来配置CORS跨域,该方式也是可以实现网关Gateway的CORS跨域配置。示例代码如下:
@Configuration
public class AppConfig {
@Bean
public CorsWebFilter corsWebFilter() {
CorsConfiguration config=new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
//设置预检请求的缓存时间(秒),在这个时间段里,对于相同的跨域请求不会再预检了
config.setMaxAge(18000L);
UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**",config);
return new CorsWebFilter(source);
}
}
注意事项
微服务中如果我们Gateway中配置了CORS跨域,其他微服务中就不要再配置CORS跨域,避免重复配置导致错误。
总结
在最开始发现跨域问题的时候首先就是采用的官网说明的application.yml配置CORS跨域的方案,该方案是可行的。博主的Spring Cloud版本为Greenwich.RELEASE,SpringBoot的版本为2.1.3.RELEASE,Gateway的版本为2.1.0.RELEASE,所以更高的版本通过application.yml配置的方式肯定是可行。同时也使用Java Bean代码的方式测试了CORS跨域的配置,也是可行。其实方案一和方案二最终都是通过CorsConfiguration来配置的CORS跨域,application.yml的方式是Gateway已经帮我们实现了CorsConfiguration,具体的源码没有深入的研究。本文记录了Gateway网关两种配置CORS跨域的方案,博主采用了官方介绍的application.yml配置的方案实现了CORS跨域配置。在学习跨域配置的时候,同时也查阅了网上的一些博客,选择了几篇又代表的博客作为参考博客(见 参考博客 小节)。文中如果有描述不正确的地方,希望各位博友反馈。该篇文章主要记录一下Gateway网关如何配置CORS跨域,同时希望其他网友遇到该问题可以提供一些帮助。
参考博客
更多推荐
所有评论(0)