zuul过滤器使用及详解
    过滤器(filter)是zuul的核心组件
    zuul大部分功能都是通过过滤器来实现的。 zuul中定义了4种标准过滤器类型,这些过滤器
    类型对应于请求的典型生命周期。
    PRE:这种过滤器在请求被路由之前调用。可利用这种过滤器实现身份验证、在
    集群中选择请求的微服务、记录调试信息等。
    ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服
    务的请求,并使用 Apache HttpCIient或 Netfilx Ribbon请求微服务
    POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准
    的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
    ERROR:在其他阶段发生错误时执行该过滤器。
    zuul请求的生命周期如下图
    image.png
    编写一个过滤器,见示例:08-ms-gateway-zuul-filter
    增加过滤器类,需继承抽象类,然后实现几个抽象
    方法
    image.png
    由代码可知,自定义的 zuul Filter需实现以下几个方法。
    filterType:返回过滤器的类型。有 pre、 route、 post、 error等几种取值,分
    别对应上文的几种过滤器。详细可以参考 com.netflix.zuul.ZuulFilter.filterType()中
    的注释。filter0rder:返回一个 int值来指定过滤器的执行顺序,不同的过滤器允许返回相
    同的数字。
    shouldFilter:返回一个 boolean值来判断该过滤器是否要执行, true表示执
    行, false表示不执行。
    run:过滤器的具体逻辑。本例中让它打印了请求的 HTTP方法以及请求的地址
    运行项目访问地址:http://localhost:8040/microservice-provider-user/getIpAndPort
    可以看到zuul服务的后台正常打印了run方法里的日志
    禁用zuul过滤器
    Spring Cloud默认为Zuul编写并启用了一些过滤器,例如DebugFilter、
    FormBodyWrapperFilter等,这些过滤器都存放在spring-cloud-netflix-core这个jar包
    里,一些场景下,想要禁用掉部分过滤器,该怎么办呢?
    只需在application.yml里设置zuul...disable=true
    例如,要禁用上面我们写的过滤器,这样配置就行了:
    zuul.PreRequestLogFilter.pre.disable=true
    zuul的容错与回退
    大家可以想一下如果zuul代理的后端微服务挂了会出现什么情况?
    zuul默认已经整合了hystrix,也就是zuul也是可以利用hystrix做降级容错处理的,但是
    zuul监控的粒度是微服务级别,而不是某个API
    见示例:08-ms-gateway-zuul-fallback
    编写zuul的降级回退类如下:
    image.png
    关闭zuul代理的用户微服务,再运行本项目,访问地址:
    http://localhost:8040/microservice-provider-user/getIpAndPort,将会返回如下内
    容:
    服务不可用,请稍后再试