首页 > 解决方案 > 如何让zuul代理处理cors?

问题描述

我在充当 zuul 代理的微服务后面有几个微服务。

当从域外调用时,微服务返回“403- Invalid 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 - Invalid Cors”!我究竟做错了什么?我猜这是因为zuul代理实际上除了转发请求之外什么都不做......但是如何配置它以使目标MS注意到请求来自zuul,在同一个网络上并允许它?

标签: spring-bootspring-cloudspring-cloud-netflix

解决方案


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

您可以尝试将CorsFilterbean 添加到您的 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


推荐阅读