zoukankan      html  css  js  c++  java
  • Spring Cloud Gateway Cors跨域问题的解决

    CORS

    前后端分离就会碰到跨域问题,原本我们在后端采用 CORS 解决,现在利用网关,可以放在网关解决。

    版本:
    spring-cloud:Hoxton.SR3
    spring-cloud-gateway:2.2.2.RELEASE

    一共两个文件

    CorsConfiguration.java
    /**
     * 配置跨域
     */
    @Configuration
    public class CorsConfiguration {
    
        @Bean
        public CorsResponseHeaderFilter corsResponseHeaderFilter() {
            return new CorsResponseHeaderFilter();
        }
    
        @Bean
        public CorsWebFilter corsWebFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration corsConfiguration = new CorsConfiguration();
    
            corsConfiguration.addAllowedHeader("*");
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.setAllowCredentials(true);
            corsConfiguration.setMaxAge(600L);
    
            source.registerCorsConfiguration("/**", corsConfiguration);
            return new CorsWebFilter(source);
        }
    }
    
    CorsResponseHeaderFilter.java
    /**
     * 跨域请求头重复处理过滤器
     */
    public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
        @Override
        public int getOrder() {
            // 指定此过滤器位于NettyWriteResponseFilter之后
            // 即待处理完响应体后接着处理响应头
            return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
        }
    
        @Override
        @SuppressWarnings("serial")
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            return chain.filter(exchange).then(Mono.defer(() -> {
                exchange.getResponse().getHeaders().entrySet().stream()
                        .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1))
                        .filter(kv -> (kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)
                                || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)))
                        .forEach(kv ->
                        {
                            kv.setValue(new ArrayList<String>() {{
                                add(kv.getValue().get(0));
                            }});
                        });
    
                return chain.filter(exchange);
            }));
        }
    }
    
    没有修不好的电脑
  • 相关阅读:
    魔幻的曲率--已知曲率画图形
    关于填报《国家自然科学基金资助项目结题报告》的补充说明
    关于填报《国家自然科学基金资助项目结题报告》的说明
    浙江大学2015年数学分析考研试题
    Slony-I中对storelisten出错的处理
    PostgreSQL没有redo log multiplexing
    Pgpool烂泥扶不上墙
    集群系统与事务处理需要注意的一点
    Slony-I 文摘
    什么样的日志才是好日志
  • 原文地址:https://www.cnblogs.com/duniqb/p/12702542.html
Copyright © 2011-2022 走看看