如何让zuul代理处理cors?

时间:2018-05-20 18:56:57

标签: spring-boot spring-cloud spring-cloud-netflix

我在微服务背后有几个微服务,充当了zuul代理。

当从域外调用时,微服务返回" 403-无效的Cors"。

通过将以下内容添加到 每个 微服务来解决此问题:

@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**"); //just for the sake of explaination i'm allowing everything
}
}

无论如何这是一个糟糕的设计:毕竟我有一个zuul api网关!这应该由此完成,微服务应该在直​​接调用时实际返回该错误。

所以,我将相同的配置仅移至我的zuul微服务,顺便提一下:

@SpringBootApplication
@EnableSwagger2
@EnableZuulProxy
@ComponentScan(basePackages = "my.base.package")
public class MyApiGateway extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return configureApplication(builder);
}
  ....

道具:

zuul:
 prefix: /api
 routes:
   my-api:
     path: /myApi/**
     url: 'http: ...'
     stripPrefix: true

问题是微服务仍然会返回" 403 - 无效的Cors"!我究竟做错了什么?我想这是因为zuul代理除了转发请求之外什么都不做...但是如何配置它以使目标MS注意到请求来自zuul,在同一网络上并因此允许它?

1 个答案:

答案 0 :(得分:1)

至少在过去,Spring Cloud没有通过Spring MVC框架处理Zuul代理,因此您无法使用WebMvcConfigurerAdapter为Zuul配置CORS,请参阅:https://github.com/spring-cloud/spring-cloud-netflix/issues/888

您可以尝试将CorsFilter bean添加到Zuul API网关,请参阅:https://docs.spring.io/spring/docs/5.0.6.RELEASE/spring-framework-reference/web.html#mvc-cors-filter

或者您可以将Spring Security添加到已集成CORS支持的API网关中,请参阅:https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#cors

相关问题