Spring Cloud Zuul 服务网关(核心过滤器)

写在前面 本文参考以下文章,请参考原文

Spring Cloud源码分析(四)Zuul:核心过滤器

Spring Cloud Zuul :包含对请求的路由和过滤两个功能

  • 路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础
  • 过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础

其实Spring Cloud Zuul 路由功能也是由过滤器实现的,它的路由映射和请求转发都是由几个不同的过滤器完成的

  • 路由映射主要通过pre类型的过滤器完成,它将请求路径与配置的路由规则进行匹配,以找到需要转发的目标地址
  • 请求转发的部分则是由route类型的过滤器来完成,对pre类型过滤器获得的路由地址进行转发

所以,过滤器可以说是Zuul实现API网关功能最为核心的部件,每一个进入Zuul的HTTP请求都会经过一系列的过滤器处理链得到请求响应并返回给客户端。

过滤器:Zuul实现API网关最核心的部件

在Spring Cloud Zuul中实现的过滤器必须包含4个基本特征:过滤类型、执行顺序、执行条件、具体操作。定义一个过滤器只要继承ZuulFilter类

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;

public class AccessFilter extends ZuulFilter {

    @Override
    public boolean shouldFilter() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public Object run() throws ZuulException {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String filterType() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int filterOrder() {
        // TODO Auto-generated method stub
        return 0;
    }

}
View CodeZuulFilter
  • filterType:返回一个字符串来代表过滤器的类型,这个类型就是在HTTP请求过程中定义的各个阶段。在Zuul中默认定义了四种不同生命周期的过滤器类型,具体如下:
    • pre:可以在请求被路由之前调用。
    • routing:在路由请求时候被调用。
    • post:在routing和error过滤器之后被调用。
    • error:处理请求时发生错误时被调用。
  • filterOrder:通过int值来定义过滤器的执行顺序,数值越小优先级越高。
  • shouldFilter:返回一个boolean类型来判断该过滤器是否要执行。我们可以通过此方法来指定过滤器的有效范围。
  • run:过滤器的具体逻辑。在该函数中,我们可以实现自定义的过滤逻辑,来确定是否要拦截当前的请求,不对其进行后续的路由,或是在请求路由返回结果之后,对处理结果做一些加工等。

 

posted on 2020-10-21 15:15  dreamstar  阅读(133)  评论(0编辑  收藏  举报