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 |
本文转载自: 掘金