我正在尝试使用spring云和spring网关构建一个微服务spring-boot应用程序。在我的应用程序中,有一个api网关应用程序处理所有请求,然后将这些请求分派给正确的微服务。
对于前端,我使用角度和测试端点,我使用邮递员。目前我遇到了一个问题。我以这种方式配置了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,我就会得到正确的响应。如果我使用的是角度客户端并尝试访问一个端点,那么首先提出一个选项预飞请求,然后返回:
跨源请求被阻止:相同的原产地策略不允许在http://localhost:8080/api/entity/hello上读取远程资源。(原因: CORS标题“访问-控制-允许-起源”丢失)。状态代码: 401。
然后对..../hello路径发出GET请求,结果是相同的。
我使用的是spring 2.7.3和最新的春季启动云和网关包。
你知道怎么解决这个问题吗?任何帮助都将不胜感激。感谢所有
发布于 2022-11-23 07:31:00
尝试将CorsConfigurationSource bean添加到您的配置类。
@Bean
public CorsConfigurationSource corsConfigurationSource(GlobalCorsProperties globalCorsProperties) {
var source = new UrlBasedCorsConfigurationSource();
globalCorsProperties.getCorsConfigurations().forEach(source::registerCorsConfiguration);
return source;
}https://stackoverflow.com/questions/73905537
复制相似问题