springcloud zuul 头部信息的传递

近期在整合一套springcloud架构,在整合zuul时碰到zuul在传递header过程中会默认过滤部分信息(不是全部过滤)
解决方案一:
在自定义的头部信息中添加头部信息

但是注意,该方案只能指定部分头部信息,如果把所有头部信息都添加一遍(见注释代码),服务的post请求会提示 Content-Length header already present异常
这里要吐槽下,如果微服务项目发现错误并且未后台未提示异常记得尝试先把熔断去掉,因为熔断会覆盖异常信息,我就是因为post请求失败但是又找不到异常折腾了好几天…

public class AuthFilter extends ZuulFilter {
	private static final Logger logger = LoggerFactory.getLogger(AuthFilter.class);
	
	@Override
	public boolean shouldFilter() {
		// 判断是否需要进行处理
		return true;
	}

	@Override
	public Object run() {
		RequestContext rc = RequestContext.getCurrentContext();
		authUser(rc);
		return null;
	}

	@Override
	public String filterType() {
		return "pre";
	}

	@Override
	public int filterOrder() {
		return 0;
	}
	
	//将request中Http请求头的所有信息存到一个Map<String, String>中
/*	private static Map<String, String> httpRequestToMap(HttpServletRequest request) {
        Enumeration<String> headerNames = request.getHeaderNames();
        Map<String, String> headers = new HashMap<>();
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            headers.put(headerName, request.getHeader(headerName));
        }
        return headers;
    }*/
	
	//自定义的鉴权处理
	public static void authUser(RequestContext ctx) {
		//这里注意,不能把所有头部信息都重新添加一遍,因为zuul本身在转发时会会我们添加头部,重复添加会抛出异常而导致访问失败(post)
/*		HttpServletRequest request = ctx.getRequest();
		Map<String, String> header = httpRequestToMap(request);
		for (Map.Entry<String, String> entry : header.entrySet()) {
			ctx.addZuulRequestHeader(entry.getKey(), entry.getValue());
		}*/
		HttpServletRequest request = ctx.getRequest();
        String authorization = request.getHeader("Authorization");
        if(authorization != null) {
        	ctx.addZuulRequestHeader("Authorization", authorization);
        }
	}
}

解决方案二:
配置sensitive-headers为空,不让zuul过滤任何信息(或者指定过滤特定信息)

zuul.sensitive-headers=

也可以指定某个特定服务

zuul.routes.xxx.sensitive-headers=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值