首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么带有网关的spring云忽略了application.properties中定义的cors属性?

为什么带有网关的spring云忽略了application.properties中定义的cors属性?
EN

Stack Overflow用户
提问于 2022-09-30 07:45:53
回答 1查看 87关注 0票数 0

我正在尝试使用spring云和spring网关构建一个微服务spring-boot应用程序。在我的应用程序中,有一个api网关应用程序处理所有请求,然后将这些请求分派给正确的微服务。

对于前端,我使用角度和测试端点,我使用邮递员。目前我遇到了一个问题。我以这种方式配置了api网关:

代码语言:javascript
复制
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=*

根据文档,允许客户端提出请求就足够了。

而且我用这种方式配置了所有的网关路径..。

代码语言:javascript
复制
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

我的安全配置也是如下所示

代码语言:javascript
复制
    @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和最新的春季启动云和网关包。

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

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 07:31:00

尝试将CorsConfigurationSource bean添加到您的配置类。

代码语言:javascript
复制
@Bean
public CorsConfigurationSource corsConfigurationSource(GlobalCorsProperties globalCorsProperties) {
    var source = new UrlBasedCorsConfigurationSource();
    globalCorsProperties.getCorsConfigurations().forEach(source::registerCorsConfiguration);
    return source;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73905537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档