12 过滤器

本文详细介绍了Spring Cloud Gateway的过滤器功能,包括局部过滤器和全局过滤器的实现方式,以及它们在请求鉴权、异常处理和服务调用时长统计等场景中的应用。

12 GateWay过滤器

1.简介

Gateway作为网关的其中一个重要功能,就是实现请求的鉴权。而这个动作往往是通过网关提供的过滤器来实现的。 前面的 路由前缀 章节中的功能也是使用过滤器实现的。

  • Gateway自带过滤器有几十个,常见自带过滤器有:

  • 配置全局默认过滤器

这些自带的过滤器可以和使用 路由前缀 章节中的用法类似,也可以将这些过滤器配置成不只是针对某个路由;而是 可以对所有路由生效,也就是配置默认过滤器:

了解如下:

server:
  port: 10010
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      default-filters:
        - AddResponseHeader=X-Response-Default-MyName,piziwang
      routes:
        # 路由id,可以任意
        - id: user-service-route
        # 代理的服务地址:lb表示从eureka中获取具体服务
          uri: lb://user-service
          #路由断言,可以配置映射路径
          predicates:
            - Path=/api/user/**
          filters:
            #添加请求路径的前缀
            #- PrefixPath=/user
            # 表示过滤1个路径,2表示两个路径,以此类推
            - StripPrefix=1


eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
    instance:
      prefer-ip-address: true

  • 过滤器类型:Gateway实现方式上,有两种过滤器:
  1. 局部过滤器:通过 spring.cloud.gateway.routes.filters 配置在具体路由下,只作用在当前路由 上;自带的过滤器都可以配置或者自定义按照自带过滤器的方式。如果配置 spring.cloud.gateway.default-filters 上会对所有路由生效也算是全局的过滤器;但是这些过滤器 的实现上都是要实现GatewayFilterFactory接口。
  2. 全局过滤器:不需要在配置文件中配置,作用在所有的路由上;实现 GlobalFilter 接口即可。

2.执行生命周期

Spring Cloud Gateway 的 Filter 的生命周期也类似Spring MVC的拦截器有两个:“pre” 和 “post”。“pre”和 “post” 分 别会在请求被执行前调用和被执行后调用。

这里的 pre 和 post 可以通过过滤器的 GatewayFilterChain 执行filter方法前后来实现。

3.使用场景

常见的应用场景如下:

  • 请求鉴权:一般 GatewayFilterChain 执行filter方法前,如果发现没有访问权限,直接就返回空。
  • 异常处理:一般 GatewayFilterChain 执行filter方法后,记录异常并返回。
  • 服务调用时长统计: GatewayFilterChain 执行filter方法前后根据时间统计。

服务调用时长统计: GatewayFilterChain 执行filter方法前后根据时间统计。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值