spring cloud zuul中的过滤器
从FilterConstants入手,看zuul中默认的过滤器
这是摘自上图这个类中的部分代码,静态变量指定了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):将代理请求的响应写入当前响应。