(Zuul请求头问题)Spring Cloud系列之客户端请求带“Authorization”请求头,经过zuul转发后丢失了

(Zuul请求头问题)Spring Cloud系列之客户端请求带“Authorization”请求头,经过zuul转发后丢失了

zuul默认走的过滤器如下图:

在这里插入图片描述

在决定调用哪个路由的时候会执行PreDecorationFilter的时候:

在这里插入图片描述

必定会走getSensitiveHeaders()方法,从ZuulProperties这个全局属性类中设置的拿出SensitiveHeaders,具体如下图。
在这里插入图片描述

PreDecorationFilter决定使用哪一个route,它的结果的是放在RequestContext对象中,该对象中含有的ignoredHeaders()中的authorization、set-cookie、cookie三个忽视请求头也就带到后续会执行的route的过滤器中,后续执行的过滤器都会RequestContext context = RequestContext.getCurrentContext()也就获取到了这三个忽视头。

在pom.xml文件中加入

zuul:
  sensitive-headers:

可以去除PreDecorationFilter过滤器自带的三个忽视头(authorization、set-cookie、cookie)。具体参考8. Router and Filter: Zuul

具体执行哪个route过滤器依据路由格式来定。

1.对于serviceId格式的路由,走RibbonRoutingFilter

负责根据ServiceId来路由的RibbonRoutingFilter在route之前会调用ProxyRequestHelper的buildZuulRequestHeaders(request)来重新组装一个新的Header,RibbonRoutingFilter默认过滤来自PreDecorationFilter传递的三个忽视头(authorization、set-cookie、cookie)和其自带的host、connection、content-length、content-encoding、server、transfer-encoding、x-application-context等请求头。

RibbonRoutingFilter代码:

697878-20180609114452893-817859384.png

697878-20180609114518523-1234470597.png

本次我们主要关注buildZuulRequestHeaders这个方法
697878-20180609114634448-738387358.png

里面有个isIncludedHeader(name)
697878-20180609114722825-1514454713.png

 2.对于URL格式和域名格式的路由(用来转发不走consul的proxy,里头是使用httpclient来转发请求的),走SimpleHostRoutingFilter(会有两个重名的类,选择Spring版本高的那个)

对于请求头,逻辑和RibbonRoutingFilter一样。

关于host、connection、content-length、content-encoding、server、transfer-encoding、x-application-context,等请求头去除方法还未找到。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值