spring cloud zuul 的filter详解

spring cloud zuul中的过滤器

从FilterConstants入手,看zuul中默认的过滤器

这是一个constants类
这是摘自上图这个类中的部分代码,静态变量指定了zuul中默认的过滤器和响应的order.

// ORDER constants -----------------------------------

	/**
	 * Filter Order for {@link DebugFilter#filterOrder()}
	 */
	public static final int DEBUG_FILTER_ORDER = 1;

	/**
	 * Filter Order for {@link org.springframework.cloud.netflix.zuul.filters.pre.FormBodyWrapperFilter#filterOrder()}
	 */
	public static final int FORM_BODY_WRAPPER_FILTER_ORDER = -1;

	/**
	 * Filter Order for {@link org.springframework.cloud.netflix.zuul.filters.pre.PreDecorationFilter}
	 */
	public static final int PRE_DECORATION_FILTER_ORDER = 5;

	/**
	 * Filter Order for {@link org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter#filterOrder()}
	 */
	public static final int RIBBON_ROUTING_FILTER_ORDER = 10;

	/**
	 * Filter Order for {@link org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter#filterOrder()}
	 */
	public static final int SEND_ERROR_FILTER_ORDER = 0;

	/**
	 * Filter Order for {@link SendForwardFilter#filterOrder()}
	 */
	public static final int SEND_FORWARD_FILTER_ORDER = 500;

	/**
	 * Filter Order for {@link org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter#filterOrder()}
	 */
	public static final int SEND_RESPONSE_FILTER_ORDER = 1000;

	/**
	 * Filter Order for {@link org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter#filterOrder()}
	 */
	public static final int SIMPLE_HOST_ROUTING_FILTER_ORDER = 100;

	/**
	 * filter order for {@link Servlet30WrapperFilter#filterOrder()}
	 */
	public static final int SERVLET_30_WRAPPER_FILTER_ORDER = -2;

	/**
	 * filter order for {@link org.springframework.cloud.netflix.zuul.filters.pre.ServletDetectionFilter#filterOrder()}
	 */
	public static final int SERVLET_DETECTION_FILTER_ORDER = -3;

从四个阶段来讲zuul的过滤器

pre:

  • ServletDetectionFilter (-3) : 检测请求是通过DispatcherServlet还是ZuulServlet 运行的.
  • Servlet30WrapperFilter(-2):对Servlet3.0环境的包装器过滤
  • FormBodyWrapperFilter(-1):为下游服务解析表单数据并重新编码.仅在content-type为application/x-www-form-urlencoded或者multipart/form-data时生效.
  • DebugFilter(1):如果设置了“debug”请求参数,则将{@link RequestContext}调试属性设置为true
  • PreDecorationFilter(5):根据提供的{@link RouteLocator}确定路由的位置和方式。 *还为下游请求设置各种代理相关的标头

error

  • SendErrorFilter(0):默认情况下转发到/error路径,如果RequestContext.getThrowable()不是空.

route

  • RibbonRoutingFilter(10):使用Ribbon,Hystrix和可插入的http客户端发送请求。
  • SimpleHostRoutingFilter(100):通过过apache http clients向预定的url发送请求.
  • SendForwardFilter(500):使用requestDispatcher 转发请求.

post

  • SendResponseFilter(1000):将代理请求的响应写入当前响应。

zuul的核心代码(ZuulServlet)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值