Spring Cloud GateWay 解决跨域问题并兼容IE & 重复 Request Headers处理方法
一、Spring Cloud GateWay解决跨域问题并兼容IE
1  | js复制代码@Configuration  | 
二、Gateway处理重复Request Headers的方法
2.1 跨域完成后,出现重复header,报出以下错误:
1  | js复制代码origin xxxx has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'xxxx, xxxx', but only one is allowed.The 'Access-Control-Allow-Origin' header contains multiple values 'xxxx,xxxx', but only one is allowed.  | 
2.2 处理方法:
方法一:
由于我用的Spring Cloud是较高的版本Hoxton.SR9,这个版本中有 DedupeResponseHeaderGatewayFilterFactory,贴出源码。
1  | js复制代码import java.util.Arrays;  | 
由源码中可以看出DedupeResponseHeader的过滤规则为RETAIN_FIRST|RETAIN_UNIQUE|RETAIN_LAST。而且在DedupeResponseHeaderGatewayFilterFactory初始化时已经给定了默认的过滤规则为RETAIN_FIRST。
1  | js复制代码RETAIN_FIRST=过滤取第一个值  | 
DedupeResponseHeader可以配置三种规则中任一种规则,过滤规则和过滤参数以逗号,分割。
1  | js复制代码spring.cloud.gateway.default-filters[0]=DedupeResponseHeader=A B C D,[RETAIN_FIRST|RETAIN_UNIQUE|RETAIN_LAST]  | 
或在配置中,也可以省略过滤规则,DedupeResponseHeaderGatewayFilterFactory会自动给定RETAIN_FIRST为默认过滤规则。
1  | js复制代码spring.cloud.gateway.default-filters[0]=DedupeResponseHeader=A B C D  | 
yml配置如下:
1  | js复制代码spring:  | 
方法二:
直接继承GlobalFilter, Ordered复写 filter() 过滤exchange.getResponse().getHeaders()中的headers属性
1  | js复制代码@Component  | 
三、GateWay全局过滤器向request header中添加参数
由于在项目中从nginx请求到gateway,需要将获取到的权鉴数据存到httpRequest请求体中,供下游逻辑服务使用。
废话不多说,直接上代码。
1  | js复制代码@Component  | 
本文转载自: 掘金