spring-boot - 如何让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 Cloud 没有通过 Spring MVC 框架处理 Zuul 代理,因此您无法使用 Zuul 配置 CORS WebMvcConfigurerAdapter
,请参阅: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
推荐阅读
- android - 用于从 EPFO 站点显示的 UAN 详细信息的 API
- metadata-extractor - 这个库可以检测 JPG 是 RGB 还是 CMYK 格式?
- excel - 如何使用 Python 在 VBA 对话框上禁用或自动选择“确定”(Application.DisplayAlerts = False 不起作用)
- android - 如何使用 PackageManager 获取已安装的软件包?
- javascript - 使用 Cloud Functions 的 FCM 中的注册令牌出错
- android - Android ffmpeg 命令不适用于音高和速度变化
- cordova - 添加和配置“cordova-plugin-bg-location-sender”后,在应用程序中执行构建时出错(cordova build android)
- c# - 多选数据表数据绑定的 ASP.NET CORE 控制器参数问题
- c++ - 如何在 C++ 中创建向量的向量图?
- python - 代码未读取文件,错误对象 Len() MASTERLIST