Gateway 局部过滤器|学习笔记

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 快速学习 Gateway 局部过滤器

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段:Gateway 局部过滤器】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/685/detail/11893


Gateway 局部过滤器


内容介绍:

.局部过滤器

一、内置局部过滤器

二、自定义过滤器

.局部过滤器

局部过滤器是针对单个路由的过滤器

我们需要在每一个路由上进行单独配置


一、内置局部过滤器

在 SpringCloud Gateway 中内置了很多不同类型的网关路由过滤器,我们今天讲的是几个最常见的,具体如下:

过滤器工厂

作用

参数

AddRequestHeader

为原始请求添加Header

Header 的名称及值

AddRequestParameter


为原始请求添加请求参数

参数名称及值

AddResponseHeader

为原始响应添加Header

Header 的名称及值

DedupeResponseHeader

剔除响应头中重复的值

需要去重的 Header 名称及重策略

Hystrix

为路由引入 Hystrix 的断路器保护

Hystrixcommand 的名称

SetStatus

修改原始响应的状态码

HTTP 状态码,可以是数字,也可以是字符串

我们以 SetStatus 为例讲解,在未使用这个过滤器之前,原始转态码是多少

routes: #路由数组 [路由就是指当请求满足什么样的条件的时候转发到哪个微服务上,转发过程中还可以动一些手脚]

- id: product_route#当前路由发的标识,要求唯一,默认是 UUID

uri: http:7/localhost:8081#请求最终要被转发到的地址

uri: lb://service-product # 1b指的是负载均衡,后面跟的是具体微服务在nacos 中的标识

order: 1#路由的优先级,数字越小代表路由的优先级越高

predicates:#断言(条件判断,返回值是 boolean 转发请求要满足的条件)

-Path=/product-serv/**,#当请求路径满足 path 指定的规则时,此路由信息才会正常转发

- Age=18,60#仅仅让 age 在18到60之间的人访问

filters: #过滤器(在请求传递过程中对请求做一些手脚)

- stripPrefix=1 #在请求转发之前去掉一层路径

访问localhost:7000/product-serv/product/1得到响应码为200

添加- setstatus=250之后再次刷新,这时响应码就变为250

以上就是一种修改响应码的内置过滤器的使用方式

当内置过滤器无法满足我们的需求时,就需要自定义过滤器


二、自定义过滤器

第1步:在配置文件中,添加一个 Log 的过滤器配置

-Log=true,false#控制日志是否开启

第2步:自定义一个过滤器工厂,实现方法

我们来修改一下配置,

routes:#路由数组 [路由就是指当请求满足什么样的条件的时候转发到哪个微服务上,转发过程中还可以动一些手脚]

- id: product_route#当前路由发的标识,要求唯一,默认是 UUID

uri: http:7/localhost:8081#请求最终要被转发到的地址

uri: lb://service-product # 1b指的是负载均衡,后面跟的是具体微服务在nacos 中的标识

order: 1#路由的优先级,数字越小代表路由的优先级越高

predicates: #断言(条件判断,返回值是 boolean 转发请求要满足的条件)

- Path=/product-serv/**,#当请求路径满足 path 指定的规则时,此路由信息才会正常转发

- Age=18,60#仅仅让 age 在18到60之间的人访问

filters: #过滤器(在请求传递过程中对请求做一些手脚)

- stripPrefix=1 #在请求转发之前去掉一层路径

-Log=true,false

再重新编写一个文件,在这个文件里放置一类,这个类的名称必须以 Gateway 开头

//自定义局部过滤器

@component

public class LogGatewayFilterFactory

extends AbstractGatewayFilterFactory < LogGateway

FilterFactory.confi >{

//构造函数

public LogGatewayFilterFactory(){

super(LogGatewayFilterFactory.Config.class) ;

}

//读取配置文件中的参数赋值到配置类中

@Override

public List shortcutFieldorder () {

return Arrays.asList(“consoLeLog”,”cacheLog‘’);

}

/过滤器逻辑

@Override

public GatewayFilte

apply(LogGatewayFilterFactory.config config) {

return new GatewayFilter(){

@Override

Public Monn filter(ServerWebExchange

exchange,Gate

wayFilterChain chain) {

if (config.isCacheLog()){

System.out.println (“cacheLog已经开启了….”);

}

if (config.isConsoleLOgLog()){

System.out.println (“consoleLog已经开启了….”);

}

Return chain.filter(exchange);

//配置类接收配置参数

@Data

@NoArgsConstructor

public static class Config {

private boolean consoleLog;

private boolean cacheLog;

}

}

代码写完之后,点击启动

consoleLog 已经启动,但是 CacheLog 不启动

image.png

以上就是自定义局部过滤器的使用方式。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
Java 开发者 Spring
Spring Cloud Gateway 中,过滤器的分类有哪些?
Spring Cloud Gateway 中,过滤器的分类有哪些?
32 3
|
6月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
257 0
|
5月前
|
Java API 开发者
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
Spring Cloud Gateway中的GlobalFilter:构建强大的API网关过滤器
325 0
|
6月前
|
Java 微服务 Spring
SpringCloud&Gateway全局过滤器
SpringCloud&Gateway全局过滤器
76 1
|
6月前
|
JSON 安全 关系型数据库
SpringCloud Gateway 实现自定义全局过滤器 + JWT权限验证
SpringCloud Gateway 实现自定义全局过滤器 + JWT权限验证
|
Java Spring
Spring Cloud Gateway 源码剖析之Filter Chain过滤器链
Spring Cloud Gateway 源码剖析之Filter Chain过滤器链
272 0
|
缓存 JSON Java
【Java】SpringCloud Gateway自定义过滤器中获取ServerHttpRequest的body中的数据为NULL的问题
【Java】SpringCloud Gateway自定义过滤器中获取ServerHttpRequest的body中的数据为NULL的问题
556 0
|
负载均衡 前端开发 Java
统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
统一网关Gateway、路由断言工厂、路由过滤器及跨域问题处理
253 0
|
Java Spring
Spring Cloud Alibaba - 24 Gateway-路由、断言(Predicate)、过滤器(Filter)初体验
Spring Cloud Alibaba - 24 Gateway-路由、断言(Predicate)、过滤器(Filter)初体验
118 0
|
监控 负载均衡 Cloud Native
云原生之 Gateway 的 Filter 过滤器
云原生之 Gateway 的 Filter 过滤器
云原生之 Gateway 的 Filter 过滤器