我在微服务背后有几个微服务,充当了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,在同一网络上并因此允许它?
答案 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