zoukankan      html  css  js  c++  java
  • 微服务网关5-网关中的过滤器

    一、过滤器的基本概念

    1、作用

    过滤器就是在请求的传递过程中,对请求和响应做一些修改

    2、生命周期

    客户端的请求先经过“pre”类型的filter,然后将请求转发到具体的业务服务,收到业务服务的响应之后,再经过“post”类型的filter处理,最后返回响应到客户端。

    pre: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现参数校验、权限校验、流量监控、日志输出、协议转换等;

    post:这种过滤器在路由到达微服务以后执行。这种过滤器可用做响应内容、响应头的修改,日志的输出,流量监控等。

    B0JN9A.jpg

    3、分类

    局部过滤器 GatewayFilter:作用在某一个路由上

    全局过滤器 GlobalFilter:作用全部路由上

    二、局部过滤器

    1、内置局部过滤器

    过滤器工厂 作用 参数
    AddRequestHeader 为原始请求添加Header Header的名称及值
    AddRequestParameter 为原始请求添加请求参数 参数名称及值
    AddResponseHeader 为原始响应添加Header Header的名称及值
    DedupeResponseHeader 剔除响应头中重复的值 需要去重的Header名称及去重策略
    Hystrix 为路由引入Hystrix的断路器保护 HystrixCommand 的名称
    FallbackHeaders 为fallbackUri的请求头中添加具体的异常信息 Header的名称
    PrefixPath 为原始请求路径添加前缀 前缀路径
    PreserveHostHeader 为请求添加一个preserveHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host
    RequestRateLimiter 用于对请求限流,限流算法为令牌桶 keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
    RedirectTo 将原始请求重定向到指定的URL http状态码及重定向的url
    RemoveHopByHopHeadersFilter 为原始请求删除IETF组织规定的一系列Header 默认就会启用,可以通过配置指定仅删除哪些Header
    RemoveRequestHeader 为原始请求删除某个Header Header名称
    RemoveResponseHeader 为原始响应删除某个Header Header名称
    RewritePath 重写原始的请求路径 原始路径正则表达式以及重写后路径的正则表达式
    RewriteResponseHeader 重写原始响应中的某个Header Header名称,值的正则表达式,重写后的值
    SaveSession 在转发请求之前,强制执行WebSession::save 操作
    secureHeaders 为原始响应添加一系列起安全作用的响应头 无,支持修改这些安全响应头的值
    SetPath 修改原始的请求路径 修改后的路径
    SetResponseHeader 修改原始响应中某个Header的值 Header名称,修改后的值
    SetStatus 修改原始响应的状态码 HTTP 状态码,可以是数字,也可以是字符串
    StripPrefix 用于截断原始请求的路径 使用数字表示要截断的路径的数量
    Retry 针对不同的响应进行重试 retries、statuses、methods、series
    RequestSize 设置允许接收最大请求包的大 小。如果请求包大小超过设置的值,则返回 413 Payload TooLarge 请求包大小,单位为字节,默认值为5M
    ModifyRequestBody 在转发请求之前修改原始请求体内容 修改后的请求体内容
    ModifyResponseBody 修改原始响应体的内容 修改后的响应体内容

    2、内置局部过滤器的使用

          routes:
          - id: service-edu
            uri: lb://service-edu
            predicates:
            - Path=/user/**, /*/edu/**
            filters:
            - SetStatus=250 # 修改返回状态码
    

    测试:

    B0Nln0.png

    三、全局过滤器

    1、内置全局过滤器

    B0N37T.png

    内置全局过滤器的使用举例:负载均衡过滤器

    lb://service-edu
    

    2、自定义全局过滤器

    定义一个Filter实现 GlobalFilter 和 Ordered接口

  • 相关阅读:
    HDU1205 吃糖果【水题】
    HDU2568 前进【水题】
    架构图初体验
    五层架构
    文件系统权限设计涉及范畴
    微服务
    领域驱动设计
    容器技术Docker
    架构总结
    仓储模式的简单理解
  • 原文地址:https://www.cnblogs.com/smalldong/p/13911696.html
Copyright © 2011-2022 走看看