欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决使用zuul的时候出现的跨域response多allow-origin值的问题

程序员文章站 2022-07-12 19:09:25
...

解决使用zuul的时候出现的跨域response多allow-origin值的问题

解决跨域问题:

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter(){
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration configuration = new CorsConfiguration();

        configuration.setAllowCredentials(true);
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowedHeaders(Arrays.asList("*"));
        configuration.setAllowedMethods(Arrays.asList("*"));
        configuration.setMaxAge(300l);

        source.registerCorsConfiguration("/**",configuration);
        return new CorsFilter(source);
    }
}

请求头不带cookie的问题解决方案:
在配置文件中增加

sensitive-headers:
  customSensitiveHeaders: true

然后会出现以下问题:
The ‘Access-Control-Allow-Origin’ header contains multiple values ‘http://192.168.1.99:8080,http://192.168.1.99:8080’, but only one is allowed.
意思是说Access-Control-Allow-Origin值只能使用一个,所以需要过滤掉其中一个,原因是zuul网关为了解决跨域问题,设置了response的Access-Control-Allow-Origin为客户端orgin,Access-Control-Allow-Origin:http://192.168.1.99:8080,然后服务网关访问微服务将response中的Access-Control-Allow-Origin:http://192.168.1.99:8080带了过去,微服务为了解决跨域,又在Access-Control-Allow-Origin中加了客户端orgin,Access-Control-Allow-Origin:http://192.168.1.99:8080http://192.168.1.99:8080,解决方案是在sensitive-headers:下面配置一句

ignored-headers: Access-Control-Allow-Credentials, Access-Control-Allow-Origin

传递Access-Control-Allow-Credentials, Access-Control-Allow-Origin本次不过滤,但是下次传递过滤。
问题解决。
微服务改造的过程中会发现许多问题,其实只要认真思考,就一定能想明白的。

相关标签: zuul