为了账号安全,请及时绑定邮箱和手机立即绑定

Zuul过滤器里面用addZuulRequestHeader转发没有作用

Zuul过滤器里面用addZuulRequestHeader转发没有作用

慕森卡 2019-04-26 18:15:43
springcloud版本:Finchley SR21、引入依赖                <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-netflix-zuul</artifactId>         </dependency>2、zuul配置zuul:   routes:     app-user:       path: /user/**       serviceId: app-user3、过滤器@Component public class WebFilter extends ZuulFilter {     @Override     public String filterType() {         return "pre";     }     @Override     public int filterOrder() {         return 0;     }     @Override     public boolean shouldFilter() {         return true;     }     @Override     public Object run() throws ZuulException {         System.out.println("zuul过滤器...");         //向header中添加鉴权令牌         RequestContext requestContext = RequestContext.getCurrentContext();         //获取header         HttpServletRequest request = requestContext.getRequest();         String authorization = request.getHeader("Authorization");         if(authorization != null) {             System.out.println("authorization: " + authorization);             requestContext.addZuulRequestHeader("Authorization", authorization);         }         return null;     } }4、在app-user服务的controller里面测试能否获取到@Autowired     private HttpServletRequest request;     /**      * 查询全部数据      * @return      */     @RequestMapping(method= RequestMethod.GET)     public Result findAll(){         String header = request.getHeader("Authorization");         System.out.println("authHeader: " + header);         return new Result(true,StatusCode.OK,"查询成功",userService.findAll());     }5、结果1)、在过滤器里面能拿到,并且打印有值;2)、在controller里面测试获取不到,打印为null。PS:不知道为什么在过滤器里这个addZuulRequestHeader没起作用,折腾半天没找原因,甚至查找了一些博客,写法都一样的,就那么几步,有哪位大佬遇到过这问题的,可以给点思路吗……┭┮﹏┭┮
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

经过无数次测试,终于找到问题了,罪魁祸首就是Authorization这个单词,不论大写小写,都获取不到,但是改成Authorization1就能获取到,我直接换成了其它的单词如token,就OK了,还专门试了试各种单词以及大小写,发现就是Authorization这个单词的问题,不知道是敏感词汇还是怎么的,zuul转发时子服务就是拿不到。
顺便查看了下zuul过滤器里面自带的requestContext.addZuulRequestHeader("xx")的源码,里面是这样写的:
public void addZuulRequestHeader(String name, String value) {
this.getZuulRequestHeaders().put(name.toLowerCase(), value);
}
是会自己转成小写的,所以保险起见以后header命名最好都是小写,以免引起未知的问题。

查看完整回答
反对 回复 2019-05-16
?
狐的传说

TA贡献1804条经验 获得超3个赞

特意登录感谢,搞了我一晚上


查看完整回答
反对 回复 2019-05-16
?
UYOU

TA贡献1878条经验 获得超4个赞

敏感头信息Authorization,Cookie,Set-Cookie默认是不转发的,也就获取不到
在配置文件里设置zuul.sensitiveHeaders为空,就可以获取到了

查看完整回答
反对 回复 2019-05-16
  • 3 回答
  • 0 关注
  • 2427 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信