跨域问题的解决-gateway跨域接解决方案,使用CorsWebFilter

861 阅读1分钟

关于跨域问题请先看我的另一篇文章:
blog.csdn.net/fsjwin/arti…

这里再列举出一种编码方式,(注意不是nginx的解决方案)是通过编码的方式告诉浏览器可以跨域访问了。

1. 在网关服务中添加Filter

@Component
public class MyCorsConfiguration {

    /**
     *
     * @return CorsWebFilter 为愧于的webfilter 有spring框架提供
     */
    @Bean
    public CorsWebFilter corsWebFilter(){

        /**
         * 返回一个CorsWebFilter ,构造其中需要传入连个形参,均为接口,可以直接new 接口
         * 是借口可以使用它的实现类来处理
         */
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();

        //构建CorsConfiguration
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedHeader("*");
        // 允许cookie跨域
        corsConfiguration.setAllowCredentials(true);

        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(urlBasedCorsConfigurationSource);
    }

}

CorsWebFilter :是有spring提供的过滤器,会在请求到来之前和返回时经过这个过滤器,放入spring的容器中即可生效。

2. 在网关服务中添加Filter

跨域访问分两次

  1. 第一次options请求,此时请求到达gateway,网关在相应报文中告诉浏览器可以跨域:在这里插入图片描述
  2. 浏览器发起真正的请求,则可以跨域,原理是跨域是浏览器的策略。
    在这里插入图片描述
    这是通过编码的方式骗过浏览器的解决方案,在生产上使用nginx代理的方式解决。