Java中的gateway自定義過濾器詳解
全局過濾器(GloabalFilter)
注意:
過濾器是指gateway在路由過程中(A地址路由到B地址)生效進行過濾操作的,所有首先你得先配一個地址路由。比如我站在這里設(shè)置將//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;
}
}
運行結(jié)果
然后訪問//localhost:8000/gateway/listAll,路由到//localhost:8010/user/listAll成功
控制臺輸出

局部過濾器
有兩種方式:
- 在上面全局模式的基礎(chǔ)上,改為實現(xiàn)gatewayFilter和Ordered接口
- 繼承AbstractGatewayFilterFactory類(推薦)
局部過濾器實現(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點半之后的請求,請求者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的啟動類上進行注冊
@Bean
public MyPartGatewayFilterFactory myGatewayFilterFactory(){
return new MyPartGatewayFilterFactory();
}
對應(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]
運行結(jié)果
訪問//localhost:8000/user/test
8000是我的gateaway運行端口

到此這篇關(guān)于Java中的gateway自定義過濾器詳解的文章就介紹到這了,更多相關(guān)gateway自定義過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java引用傳遞和值傳遞棧內(nèi)存與堆內(nèi)存的指向操作
這篇文章主要介紹了Java引用傳遞和值傳遞棧內(nèi)存與堆內(nèi)存的指向操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java中var的作用局部變量類型推斷關(guān)鍵字詳解
var是Java 10引入的局部變量類型推斷關(guān)鍵字,簡化變量聲明語法,不改變強類型特性,編譯時推斷類型,使用規(guī)則嚴(yán)格,適用于局部變量且立即初始化,適用于復(fù)雜泛型、循環(huán)變量和臨時局部變量,本文給大家介紹Java中var的作用局部變量類型推斷關(guān)鍵字,感興趣的朋友一起看看吧2025-11-11
java中PriorityBlockingQueue的入隊知識點總結(jié)
在本篇文章里小編給大家整理一篇關(guān)于java中PriorityBlockingQueue的入隊知識點總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2021-01-01

