Spring Cloud Gateway網關中有兩個過濾器,它們分別是GlobalFilter、GatewayFilter.spring
各位朋友可能會有疑問,在zuul網關中只有ZuulFilter,爲何在Spring Cloud Gateway中須要有兩個filter.其實從命名中就能夠看出,GloabalFilter是全局過濾器對於全部路由進行監控,GatewayFilter主要針對於某一個路由。那麼具體如何在Spring Cloud Gateway中使用呢?bash
GlobalFilter:app
1:實現GlobalFilter接口ide
@Slf4j
public class CustomGlobalFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("GlobalFilter success");
return chain.filter(exchange);
}
}
複製代碼
2:在配置文件中配置beanui
@Bean
public CustomGlobalFilter customGlobalFilter(){
return new CustomGlobalFilter();
}
複製代碼
GatewayFilter:spa
1:繼承AbstractGatewayFilterFactorycode
@Slf4j
public class CustomGatewayFilter extends AbstractGatewayFilterFactory {
@Override
public GatewayFilter apply(Object config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("GatewayFilter success");
return chain.filter(exchange);
}
};
}
}
複製代碼
2:在yml配置文件中指定filterserver
spring:
application:
name: gateway
cloud:
nacos:
discovery:
server-addr: 192.168.2.107:8848
config:
server-addr: 192.168.2.107:8848
file-extension: yml
gateway:
routes:
- id: business-account
uri: lb://business-account
filters:
- CustomGatewayFilter #這裏寫類名
predicates:
- Path=/account/get
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
複製代碼
3:在配置文件中配置bean繼承
@Bean
public CustomGatewayFilter customGatewayFilter(){
return new CustomGatewayFilter();
}
複製代碼
根據上述配置就能夠正常的使用Spring Cloud Gateway過濾器了。接口