为什么带有gatway的spring cloud会忽略application.properties中定义的cors属性



我正在尝试使用spring-cloud和spring-gateway构建一个微服务spring-boot应用程序。在我的应用程序中,有一个api网关应用程序处理所有请求,稍后将这些请求发送到正确的微服务。

对于前端,我使用angular,对于测试端点,我使用poster。目前我有一个CORS问题。我以这种方式配置了api网关:

spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping=true
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowedOrigins=*
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowedHeaders=*
spring.cloud.gateway.globalcors.corsConfigurations.[/**].allowedMethods=*

根据文档,这应该足以让客户毫无问题地提出请求。

此外,我已经以这种方式配置了所有网关路由。。。

spring.cloud.gateway.routes[8].id=entity-service
spring.cloud.gateway.routes[8].uri=lb://entity-service
spring.cloud.gateway.routes[8].predicates[0]=Path=/api/entity/hello

我的安全配置也是下面的配置

@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {

@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity serverHttpSecurity) {
serverHttpSecurity
.authorizeExchange(exchange ->
exchange.pathMatchers("/eureka/**")
.permitAll()
.anyExchange()
.authenticated())
.cors()
.and()
.csrf()
.disable()
.oauth2ResourceServer(ServerHttpSecurity.OAuth2ResourceServerSpec::jwt);
return serverHttpSecurity.build();
}
}

也就是说,例如,如果我向路径/api/entity/hello的邮递员提出请求,我会得到正确的响应。如果我正在使用angular客户端并尝试访问端点,首先会发出OPTIONS飞行前请求并返回:

阻止跨来源请求:同源策略不允许读取位于的远程资源http://localhost:8080/api/entity/hello.(原因:缺少CORS标头"Access Control Allow Origin"(。状态代码:401。

则对CCD_ 2路径进行GET请求并且结果是相同的。

我使用的是springboot 2.7.3和最新的springboot云和网关包。

你知道怎么解决这个问题吗?任何帮助都将不胜感激。感谢所有

尝试将CorsConfigurationSourcebean添加到您的配置类中。

@Bean
public CorsConfigurationSource corsConfigurationSource(GlobalCorsProperties globalCorsProperties) {
var source = new UrlBasedCorsConfigurationSource();
globalCorsProperties.getCorsConfigurations().forEach(source::registerCorsConfiguration);
return source;
}

相关内容

  • 没有找到相关文章

最新更新