当前位置: 过滤机 >> 过滤机前景 >> SpringCloudZuul过滤器
开端
阅读本文,您将了解:
(1)Zuul过滤器类型与请求生命周期
(2)如何编写Zuul过滤器
(3)如何禁用Zuul过滤器
(4)SpringCloud为Zuul编写的过滤器及其功能。
过滤器类型与请求生命周期
Zuul大部分功能都是通过过滤器来实现的。Zuul中定义了四种标准过滤器类型,这些过滤器类型对应于请求的典型生命周期。
(1)PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
(2)ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用ApacheHttpClient或NetfilxRibbon请求微服务。
(3)POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTPHeader、收集统计信息和指标、将响应从微服务发送给客户端等。
(4)ERROR:在其他阶段发生错误时执行该过滤器。
除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。例如,我们可以定制一种STATIC类型的过滤器,直接在Zuul中生成响应,而不将请求转发到后端的微服务。
Zuul请求的生命周期如图8-5所示,该图详细描述了各种类型的过滤器的执行顺序。
编写Zuul过滤器
理解过滤器类型和请求生命周期后,我们来编写一个Zuul过滤器。编写Zuul的过滤器非常简单,我们只需继承抽象类ZuulFilter,然后实现几个抽象方法就可以了。
那么现在,我们来编写一个简单的Zuul过滤器,让该过滤器打印请求日志。
(1)复制项目microservice-gateway-zuul,将ArtifactId修改为microservice-gateway-zuul-filter。
(2)编写自定义Zuul过滤器
publicclassPreRequestLogFilterextendsZuulFilter{
privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(PreRequestLogFilter.class);
OverridepublicStringfilterType(){
return"pre";
}
OverridepublicintfilterOrder(){
return1;
}
OverridepublicbooleanshouldFilter(){
returntrue;
}
OverridepublicObjectrun(){
RequestContextctx=RequestContext.getCurrentContext();
HttpServletRequestrequest=ctx.getRequest();
PreRequestLogFilter.LOGGER.info(String.format("send%srequestto%s",request.getMethod(),request.getRequestURL().toString()));
returnnull;
}
}
由代码可知,自定义的ZuulFilter需实现以下几个方法:
filterType:返回过滤器的类型。有pre、route、post、error等几种取值,分别对应上文的几种过滤器。详细可以参考
转载请注明:http://www.aideyishus.com/lkcf/79.html