Java中的gateway自定义过滤器详解
全局过滤器(GloabalFilter)
注意:
过滤器是指gateway在路由过程中(A地址路由到B地址)生效进行过滤操作的,所有首先你得先配一个地址路由。比如我站在这里设置将//localhost:8000/gateway/* 请求路由到//localhost:8010/user/*,那么下面的两个样例过滤器遍对这个过程进行过滤
- id: user_route uri: lb://server-user #uri: http://localhost:8010 predicates: - Path=/gateway/** filters: - RewritePath=/gateway/(?<segment>.*),/user/$\{segment}
开启gateway的日志,方便后面查看过程
logging: level: org.springframework.cloud.gateway: DEBUG
前置过滤器
@Component public class MyHeadFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { System.out.println("123123"); return chain.filter(exchange); } @Override public int getOrder() { return 0; } }
后置过滤器
@Component public class MyTailFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { return chain.filter(exchange) .then(Mono.fromRunnable( () -> System.out.println("abcabc") )); } @Override public int getOrder() { return 0; } }
运行结果
然后访问//localhost:8000/gateway/listAll,路由到//localhost:8010/user/listAll成功
控制台输出
局部过滤器
有两种方式:
- 在上面全局模式的基础上,改为实现gatewayFilter和Ordered接口
- 继承AbstractGatewayFilterFactory类(推荐)
局部过滤器实现
public class MyPartGatewayFilterFactory extends AbstractGatewayFilterFactory<MyPartGatewayFilterFactory.Config> { private static final Log log = LogFactory.getLog(GatewayFilter.class); private static final String NAME = "name"; public MyPartGatewayFilterFactory() { super(Config.class); } @Override public List<String> shortcutFieldOrder() { return Arrays.asList(NAME); } @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { return chain.filter(exchange).then( Mono.fromRunnable(() -> { StringBuilder sb = new StringBuilder("这是2022年7月25日8点半之后的请求,请求者name(入参):"); sb.append(config.getName()); log.info(sb.toString()); }) ); }; } public static class Config{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }
在gateway的启动类上进行注册
@Bean public MyPartGatewayFilterFactory myGatewayFilterFactory(){ return new MyPartGatewayFilterFactory(); }
对应的配置文件部分
- id: my_route uri: http://127.0.0.1:8010 filters: - name: MyPart args: name: yuan predicates: # - After=2017-01-20T17:42:47.789-07:00[America/Denver] - After=2022-07-25T08:30:00.003+08:00[Asia/Shanghai]
运行结果
访问//localhost:8000/user/test
8000是我的gateaway运行端口
到此这篇关于Java中的gateway自定义过滤器详解的文章就介绍到这了,更多相关gateway自定义过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java8日期类LocalDate、LocalTime和LocalDateTime使用方法详解
这篇文章主要给大家介绍了关于Java8日期类LocalDate、LocalTime和LocalDateTime使用方法的相关资料,LocalDateTime是JDK1.8出现的新特性,解决线程不安全的问题,文中通过代码介绍的非常详细,需要的朋友可以参考下2023-11-11Spring+SpringMVC+MyBatis深入学习及搭建(一)之MyBatis的基础知识
这篇文章主要介绍了Spring+SpringMVC+MyBatis深入学习及搭建(一)之MyBatis的基础知识,需要的朋友可以参考下2017-05-05SpringCloud可视化链路追踪系统Zipkin部署过程
这篇文章主要介绍了SpringCloud可视化链路追踪系统Zipkin部署过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-03-03
最新评论