大家应该都知道在做Zuul网关过滤的时候,如果不在网关过滤时转发头信息,经过网关时头信息就会丢失。

但我用 addZuulRequestHeader转发头信息时,却不起作用,在子服务的controller取不到头信息的内容,

是因为头信息的Authorization这个单词的问题

敏感头信息Authorization,Cookie,Set-Cookie默认是不转发的,也就获取不到
在配置文件里设置zuul.sensitiveHeaders为空,或者使用别的单词如Authorization1,就可以获取到了。

我的代码如下:

1、引入依赖

 <dependencies>
<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>
</dependencies>

2、zuul配置

 zuul:
routes:
xxxx-base:
path: /base/**
serviceId: xxxx-base

3、过滤器

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; @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 { //得到request上下文
RequestContext currentContext = RequestContext.getCurrentContext();
//得到request域
HttpServletRequest request = currentContext.getRequest();
//得到头信息
String header = request.getHeader("Authorization");
//判断是否有头信息
if(header != null && !"".equals(header)){
//把头信息继续向下传
currentContext.addZuulRequestHeader("Authorization", header);
}
return null;
}
}

4、在xxxx-user服务的controller里面测试能否获取到

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest;
import java.util.List; @RestController
@CrossOrigin
@RequestMapping("/label")
public class LabelController { @Autowired
private LabelService labelService;
@Autowired
private HttpServletRequest request; @GetMapping
public Result findAll(){
//获取头
String header= request.getHeader("Authorization");
System.out.println("++++++++++++++:"+header); return new Result(true, StatusCode.OK,"查询成功",labelService.findAll());
}
}

5、结果
1)、在过滤器里面能拿到,并且打印有值;
2)、在controller里面测试获取不到,打印为null。

最终在网上看到一个兄弟的博客,才找出问题所在,

万分感谢!贴上原文地址 https://ask.csdn.net/questions/748656?sort=id

最新文章

  1. 关于smarty的一些个人笔记
  2. JavaWeb学习之环境搭建
  3. [转]Linux下用gcc/g++生成静态库和动态库(Z)
  4. PayPal 开发详解(六):下载paypal立即付款SDK 并编译打包
  5. Java学习--final与static
  6. javascript中bind,apply,call的相同和不同之处
  7. 【转】Android的onCreateOptionsMenu()创建菜单Menu详解
  8. Handsontable通用方法
  9. Peeking Iterator 解答
  10. 【IOS开发】基础
  11. ECMAScript6之let与const关键字
  12. python学习day3------列表、元组、字符串操作
  13. SSO 基于Cookie+fliter实现单点登录 实例解析(一)
  14. OJ题:计算各个数的位数之和
  15. docker-网络基础配置和dockerfile
  16. 一.javascript核心部分:1.词法结构
  17. IDEA为了使用方便,需要改的几条配置
  18. 详解Paint的setColorFilter(ColorFilter filter)
  19. Spring静态注入的三种方式
  20. java实现excel表格导出

热门文章

  1. 34. Find First and Last Position of Element in Sorted Array (JAVA)
  2. Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies (贪心+字符串)
  3. The Complex Inversion Formula. Bromwich contour.
  4. LOJ 6192 城市网络(树上倍增)
  5. 【洛谷P2398】GCD SUM
  6. Vue在移动端App中使用的问题总结
  7. luogu 4147 玉蟾宫 悬线DP
  8. R which
  9. python list 插入元素
  10. Anaconda-navigator 打不开的解决方法(亲测有效!)