Java中的gateway自定義過(guò)濾器詳解
全局過(guò)濾器(GloabalFilter)
注意:
過(guò)濾器是指gateway在路由過(guò)程中(A地址路由到B地址)生效進(jìn)行過(guò)濾操作的,所有首先你得先配一個(gè)地址路由。比如我站在這里設(shè)置將//localhost:8000/gateway/* 請(qǐng)求路由到//localhost:8010/user/*,那么下面的兩個(gè)樣例過(guò)濾器遍對(duì)這個(gè)過(guò)程進(jìn)行過(guò)濾
- id: user_route uri: lb://server-user #uri: http://localhost:8010 predicates: - Path=/gateway/** filters: - RewritePath=/gateway/(?<segment>.*),/user/$\{segment}
開(kāi)啟gateway的日志,方便后面查看過(guò)程
logging: level: org.springframework.cloud.gateway: DEBUG
前置過(guò)濾器
@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; } }
后置過(guò)濾器
@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; } }
運(yùn)行結(jié)果
然后訪問(wèn)//localhost:8000/gateway/listAll,路由到//localhost:8010/user/listAll成功
控制臺(tái)輸出
局部過(guò)濾器
有兩種方式:
- 在上面全局模式的基礎(chǔ)上,改為實(shí)現(xiàn)gatewayFilter和Ordered接口
- 繼承AbstractGatewayFilterFactory類(lèi)(推薦)
局部過(guò)濾器實(shí)現(xiàn)
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點(diǎn)半之后的請(qǐng)求,請(qǐng)求者name(入?yún)ⅲ?); 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的啟動(dòng)類(lèi)上進(jìn)行注冊(cè)
@Bean public MyPartGatewayFilterFactory myGatewayFilterFactory(){ return new MyPartGatewayFilterFactory(); }
對(duì)應(yīng)的配置文件部分
- 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]
運(yùn)行結(jié)果
訪問(wèn)//localhost:8000/user/test
8000是我的gateaway運(yùn)行端口
到此這篇關(guān)于Java中的gateway自定義過(guò)濾器詳解的文章就介紹到這了,更多相關(guān)gateway自定義過(guò)濾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 自定義指定路由上的Gateway過(guò)濾器工廠詳解
- SpringCloud Gateway的路由,過(guò)濾器和限流解讀
- 網(wǎng)關(guān)Gateway過(guò)濾器的使用詳解
- springcloud整合gateway實(shí)現(xiàn)網(wǎng)關(guān)全局過(guò)濾器功能
- 聊聊Spring?Cloud?Gateway過(guò)濾器精確控制異常返回問(wèn)題
- spring cloud gateway全局過(guò)濾器實(shí)現(xiàn)向request header中放數(shù)據(jù)
- SpringCloud Gateway加載斷言predicates與過(guò)濾器filters的源碼分析
相關(guān)文章
spring cloud gateway 限流的實(shí)現(xiàn)與原理
這篇文章主要介紹了spring cloud gateway 限流的實(shí)現(xiàn)與原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Java Web學(xué)習(xí)之Cookie和Session的深入理解
這篇文章主要給大家介紹了關(guān)于Java Web學(xué)習(xí)之Cookie和Session的相關(guān)資料,需要的朋友可以參考下2018-04-04Mybatis注解開(kāi)發(fā)@Select執(zhí)行參數(shù)和執(zhí)行sql語(yǔ)句的方式(最新詳解)
@Select 是 Mybatis 框架中的一個(gè)注解,用于執(zhí)行 SQL 查詢(xún)語(yǔ)句,并把查詢(xún)結(jié)果映射到指定的 Java 對(duì)象中,這篇文章主要介紹了Mybatis注解開(kāi)發(fā)@Select執(zhí)行參數(shù)和執(zhí)行sql語(yǔ)句的方式,需要的朋友可以參考下2023-07-07Mybatis動(dòng)態(tài)SQL foreach標(biāo)簽用法實(shí)例
這篇文章主要介紹了Mybatis動(dòng)態(tài)SQL foreach標(biāo)簽用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10SpringBoot集成企業(yè)微信開(kāi)發(fā)的實(shí)現(xiàn)
本文將詳細(xì)介紹如何使用?Spring?Boot?集成企業(yè)微信開(kāi)發(fā),通過(guò)企業(yè)微信?API?可以實(shí)現(xiàn)企業(yè)內(nèi)部的一些自動(dòng)化業(yè)務(wù)流程,提高工作效率,感興趣的可以了解一下2023-07-07使用Spring AOP做接口權(quán)限校驗(yàn)和日志記錄
本文介紹了面向切面編程(AOP)的基本概念、應(yīng)用場(chǎng)景及其在Spring中的實(shí)現(xiàn)原理,通過(guò)AOP,可以方便地在不修改原有代碼的情況下,實(shí)現(xiàn)日志記錄、權(quán)限校驗(yàn)等功能,以學(xué)生身份證號(hào)查詢(xún)接口為例,展示了如何定義權(quán)限注解、切面類(lèi)以及權(quán)限驗(yàn)證服務(wù),感興趣的朋友一起看看吧2025-01-01Struts2實(shí)現(xiàn)文件上傳功能實(shí)例解析
這篇文章主要介紹了Struts2實(shí)現(xiàn)文件上傳功能實(shí)例解析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01