springcloud跨域重复问题Allow-Origin header contains multiple values... but only one is allowed

场景描述

使用cloud与前端在局域网下进行项目的交互,但是一直出现这个报错。

问题描述

首先我没有使用nginx,其次我们是用的局域网进行的交互。

之前也怀疑了是因为局域网的问题,因为我们使用的是校园网,就怀疑其实校园网是不是就是一个个小的局域网,所以就出现了跨域问题,但是在经过不断的测试之后,有些接口是没有跨域问题的,所以这个问题叉掉。

完了之后就问的另一位后端大佬,他把能想到的问题都测试了一遍,他也测试了一遍校园网,又用的自己的热点,还有把安全框架关了进行测试,但无一例外,还是报错。

于是我开始认真看报错信息,我把代码都翻烂了,但还是没有找到第二个跨域配置,甚至注解都没有,都给删的一干二净,之后前端直接给我个html文件让我自己测试,里面的东西他都配置好了,我直接打开html文件看页面上的控制台就行。

之后我就发现了一个问题。

springcloud跨域重复问题Allow-Origin header contains multiple values... but only one is allowed_第1张图片

有两个null!?

我不是都配置了跨域了吗,为啥会是两个null????????

很显然,是因为配置没有起作用,之前的跨域配置都是在网上找的。

改成下面这个配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;


@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

改成上面这个配置之后发现

springcloud跨域重复问题Allow-Origin header contains multiple values... but only one is allowed_第2张图片

变成了这个样子,这就说明配置是起作用的,接下来就要找出这个null的跨域配置在哪里了。

因为之前怀疑过是oauth里面有跨域配置,但是没有起作用,就导致了为null,但是我在认真扒拉了oauth的代码之后,我没有找到相关的过滤或者跨域配置!

之后我又查找相关资料,终于让我发现了!

是webflux的锅!

这玩意儿自己有跨域,gateway使用的就是webflux!

解决方法:

在gateway对应路由下加上配置:

- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin Access-Control-Allow-Headers

问题就解决了!

参考文章:

spring cloud gateway跨域问题 - 简书

前后端分离 跨域问题(针对SpringBoot项目和GateWay跨域)_springboot gateway 跨域访问-CSDN博客

你可能感兴趣的:(报错,spring,cloud,spring,后端)