网关(gateway):自定义过滤器(filter)
网关过滤器链中的过滤器有两种:
1、GatewayFilter
路由过滤器,作用范围比较灵活,可以是任意指定的路由Route.
@Component
public class PrintAnyGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {
@Override
public GatewayFilter apply(Object config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取请求
ServerHttpRequest request = exchange.getRequest();
// 编写过滤器逻辑
System.out.println("过滤器执行了");
// 放行
return chain.filter(exchange);
}
};
}
}
spring:
cloud:
gateway:
default-filters:
- PrintAny
2、GlobalFilter
全局过滤器,作用范围是所有路由,声明后自动生效。
//多加一个实现接口Ordered是为了实现排序,例如用户校验应该是微服务转发之前执行。
@Component
public class MyGlobalFilter implements GlobalFilter , Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders headers = request.getHeaders();
System.out.println("headers = " + headers);
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}