自定义指定路由上的Gateway过滤器工厂详解
更新时间:2023年09月13日 08:45:41 作者:雪峰.贵
这篇文章主要介绍了自定义指定路由上的Gateway过滤器工厂详解,gateway是Spring Cloud中的一个网关服务,gateway可以使用服务注册中心进行服务发现和负载均衡,同时还可以配置断言来判断请求是否符合路由规则,需要的朋友可以参考下
前言
核心API

一、需求
拦截请求,打印日志
1.加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>2.创建自定义过滤器 工厂
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
@Slf4j
@Component
//自定义过滤器工厂的名字要以GatewayFilterFactory结尾,只需在前面加个前缀,并把前缀配到配置文件里
public class PreLogGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
@Override
public GatewayFilter apply(NameValueConfig config) {
return ((exchange, chain) -> {
//配置上写的参数用config.getName(),config.getValue()来拿
//config.getName()拿到的是a,config.getValue()拿到的是b
log.info("请求进来了,参数:{},{}",config.getName(),config.getValue());
//Request.mutate后可以修改请求,需改后build()
ServerHttpRequest modifiedRequest = exchange.getRequest().mutate().build();
//把修改后的Request给Exchange
ServerWebExchange modifiedExchange = exchange.mutate().request(modifiedRequest).build();
//继续下一个过滤器
return chain.filter(modifiedExchange);
});
}
}3.加配置
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled: true #让gateway在nacos上找微服务
routes:
- id: before_route
uri: lb://user-center #lb :nacos上的微服务
predicates:
- MyTimeBetween=上午9:00,下午11:00 #指定一个路由规则,这里的MyTimeBetween是自定义的,可以使用spring-cloud-gateway自带的。
filters:
- PreLog=a,b #写前缀即可,后面是传给工厂的参数4.验证
通过gateway访问微服务,前提是请求路径需要满足routes的谓词,才会走到这个工厂里。
http://localhost:8040/users/1
到此这篇关于自定义指定路由上的Gateway过滤器工厂详解的文章就介绍到这了,更多相关Gateway过滤器工厂内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot静态方法调用Spring容器bean的三种解决方案
在SpringBoot中静态方法调用Spring容器bean时出现的null值问题,本文就来介绍一下SpringBoot静态方法调用Spring容器bean的三种解决方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧2025-01-01
解决springboot application.properties server.port配置问题
这篇文章主要介绍了解决springboot application.properties server.port配置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08
基于Springboot+Mybatis对数据访问层进行单元测试的方式分享
本文将介绍一种快高效、可复用的解决测试方案——对数据访问层做单元测试,文章通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下2023-07-07
Spring Boot拦截器Interceptor与过滤器Filter详细教程(示例详解)
本文详细介绍了SpringBoot中的拦截器(Interceptor)和过滤器(Filter),包括它们的定义、作用范围、使用场景、实现步骤、执行顺序、常见问题及解决方案,感兴趣的朋友跟随小编一起看看吧2025-03-03
SpringBoot在项目停止(服务停止/关闭退出)之后执行的方法
这篇文章主要给大家介绍了SpringBoot在项目停止(服务停止/关闭退出)之后执行的两种方法,实现DisposableBean接口和使用@PreDestroy注解,文中有详细的代码讲解,具有一定的参考价值,需要的朋友可以参考下2023-12-12


最新评论