zuul网关转发丢失头信息问题

zuul网关转发丢失头信息问题

最近做权限springsecurity+jjwt,遇到一个问题,在网关转发时,头信息会被拦截掉。用了弯管过滤器转发,就是整死的不得行,心累两三天了?怪自己水平太菜,早知道多读点书了

第一步:先解决网关转发头信息问题。
在网关建一个过滤器类,用来转发头信息。

@Component
@Slf4j
public class AuthFilter extends ZuulFilter {
		/*
     * Zuul有一下四种过滤器
     * "pre":是在请求路由到具体的服务之前执行,这种类型的过滤器可以做安全校验,例如身份校验,参数校验等
     * "routing":它用于将请求路由到具体的微服务实例,在默认情况下,它使用Http Client进行网络请求
     * "post":它是在请求已被路由到微服务后执行,一般情况下,用作收集统计信息,指标,以及将响应传输到客户		  
     * "error":它是在其他过滤器发生错误时执行
     */
	@Override
	public String filterType() {
		return "pre";
	}
		/**
     * 过滤顺序,值越小,越早执行该过滤器
     * @return
     */
	@Override
	public int filterOrder() {
		// 过滤的顺序
		return 0;
	}
 /**	开关
     * 表示该过滤器是否过滤逻辑,如果是ture,则执行run()方法;如果是false,则不执行run()方法.
     * @return
     */
	@Override
	public boolean shouldFilter() {
		return true;
	}
	/***
	**网关真正的逻辑部分
	*/
	@Override
	public Object run() {
		//获得请求的上下文
		RequestContext requestContext = RequestContext.getCurrentContext();
		//从请求中获取request域
		HttpServletRequest request = requestContext.getRequest();
		//从request域里面获得Authorization字段下的值(我就是放Bearer + token信息)
		String header = request.getHeader("Authorization");
		if(null != header && !"".equals(header)){
		//把信息头转发到下一个微服务
			//requestContext.addZuulRequestHeader("Authorization",header);
			requestContext.addZuulRequestHeader("header",header);
		}
		return null;
	}
}

第二步:解决转发不了的问题。

重点:敏感头信息Authorization,Cookie,Set-Cookie默认是不转发的。也就是requestContext.addZuulRequestHeader(“Authorization”,header);里面用的Authorization,那是不会转发的。

解决办法: 把Authorization改了,搞成其他的就可以了。

发布了67 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_37635053/article/details/103430669