我正在尝试使用spring-cloud和spring-gateway构建一个微服务spring-boot应用程序。在我的应用程序中,有一个api-gateway应用程序处理所有的请求,然后将这些请求分派到正确的微服务。
对于前端,我使用angular,对于测试端点,我使用postman。目前,我遇到了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();
}
}
例如,如果我用postman向路径/api/entity/hello
发出请求,我会得到正确的响应。如果我使用Angular 客户端并尝试访问一个端点,首先会发出OPTIONS预检请求并返回:
- 跨源请求被阻止:同源策略不允许阅读位于http://localhost:8080/api/entity/hello的远程资源。(原因:CORS标题“访问控制-允许-来源”缺失)。状态代码:第401条 *
则发出对..../hello
路径的GET请求,结果是相同的。
我使用的是spring-boot 2.7.3和最新的spring-boot-cloud和网关包。
你有什么办法解决这个问题吗?任何帮助都将不胜感激。感谢所有人
1条答案
按热度按时间sr4lhrrt1#
尝试将CorsConfigurationSource Bean添加到配置类。