Zuul网关过滤器中转发头信息不起作用
2024-08-25 02:56:13
大家应该都知道在做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
最新文章
- 关于smarty的一些个人笔记
- JavaWeb学习之环境搭建
- [转]Linux下用gcc/g++生成静态库和动态库(Z)
- PayPal 开发详解(六):下载paypal立即付款SDK 并编译打包
- Java学习--final与static
- javascript中bind,apply,call的相同和不同之处
- 【转】Android的onCreateOptionsMenu()创建菜单Menu详解
- Handsontable通用方法
- Peeking Iterator 解答
- 【IOS开发】基础
- ECMAScript6之let与const关键字
- python学习day3------列表、元组、字符串操作
- SSO 基于Cookie+fliter实现单点登录 实例解析(一)
- OJ题:计算各个数的位数之和
- docker-网络基础配置和dockerfile
- 一.javascript核心部分:1.词法结构
- IDEA为了使用方便,需要改的几条配置
- 详解Paint的setColorFilter(ColorFilter filter)
- Spring静态注入的三种方式
- java实现excel表格导出
热门文章
- 34. Find First and Last Position of Element in Sorted Array (JAVA)
- Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies (贪心+字符串)
- The Complex Inversion Formula. Bromwich contour.
- LOJ 6192 城市网络(树上倍增)
- 【洛谷P2398】GCD SUM
- Vue在移动端App中使用的问题总结
- luogu 4147 玉蟾宫 悬线DP
- R which
- python list 插入元素
- Anaconda-navigator 打不开的解决方法(亲测有效!)