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实现方式上,有两种过滤器:
- 局部过滤器:通过 spring.cloud.gateway.routes.filters 配置在具体路由下,只作用在当前路由 上;自带的过滤器都可以配置或者自定义按照自带过滤器的方式。如果配置 spring.cloud.gateway.default-filters 上会对所有路由生效也算是全局的过滤器;但是这些过滤器 的实现上都是要实现GatewayFilterFactory接口。
- 全局过滤器:不需要在配置文件中配置,作用在所有的路由上;实现 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方法前后根据时间统计。
本文详细介绍了Spring Cloud Gateway的过滤器功能,包括局部过滤器和全局过滤器的实现方式,以及它们在请求鉴权、异常处理和服务调用时长统计等场景中的应用。
167万+

被折叠的 条评论
为什么被折叠?



