更新时间:2023-09-21 来源:黑马程序员 浏览量:

网关登录校验,需要经过客户端到网关再到服务器,过滤器是网关的一部分,过滤器内部可以包含两部分逻辑,分别是pre和post,分别会在请求路由到微服务之前和之后执行。
当所有Filter的pre逻辑都依次顺序执行通过后,请求才会被路由到微服务,否则会被拦截,后续过滤器不再执行。微服务返回结果后,再倒序执行Filter的post逻辑。
Netty路由过滤器负责将请求转发到微服务,当微服务返回结果后进入Filter的post阶段。
网关过滤器有两种,分别是:
GatewayFilter:路由过滤器,作用范围灵活,可以是任意指定的路由。
GlobalFilter:全局过滤器,作用范围是所有路由。
两种过滤器的过滤方法签名完全一致:
public interface GatewayFilter extends ShortcutConfigurable {
Name key.
String NAME_KEY - "name";
Value kkey.
String VALUE_KEY = "value";
Process the Web request and (optionally/ delegate to the next WebFi Lter
through the given GatewayFilterChain.
Params: exchange – the current server exchange
chain - provides a way to delegate to the next fiter
Retums: Mono <Void> to indicate when request processing is complete
MonocVoid> fiLter(ServerwebExchange exchange, GatewayFilterChain chain);public interface GlobalFilter {
Process the Web request and (optionally) delegate to the next WebFiLter
through the glven GatewayFilterChain.
Params: exchange - the current server exchange
chain - provides a way to delegate to the next filter
Returns: Mono<Voi d> to indicate when request processing is complete
Mono<Void> filter(ServerwebExchange exchange, GatewayFilterChain chain);Spring内置了很多GatewayFilter和GlobalFilter,其中GlobalFilter直接对所有请求生效,而GatewayFilter则需要在yaml文件配置指定作用的路由范围。常见的GatewayFilter有:
@Component
public class PrintAnyGatewayFilterFactory extends AbstractGatewayFilterFactory<Config> {
@Override
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取config值
String a = config.getA();
String b = config.getB();
String c = config.getC();
// 编写过滤器逻辑
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
// 放行
return chain.filter(exchange);
}
};
}
}自定义GlobalFilter就简单多了,直接实现GlobalFilter接口即可:@Component
public class PrintAnyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 编写过滤器逻辑
System.out.println("GlobalFilter 执行了。");
// 放行
return chain.filter(exchange);
}
@Override
public int getOrder() {
// 过滤器执行顺序,值越小,优先级越高
return 0;
}
}
毕业16个工作日,平均薪资13180元,就业率100%,广州黑马AI智能应用开发(Java)学科20250529班
2026-03-06毕业32个工作日,平均薪资11147元,就业率95%,广州黑马AI智能应用开发(Java)学科20250326班
2026-03-05黑马程序员2025全国就业数据发布:全学科平均就业率92.07%,AI开发类就业平均薪资达11869.67元。
2026-03-05黑马全国校区齐开班!场面太太太壮观了!
2026-03-03AI智能应用开发课程紧贴企业刚需,全程高效学习,直达中高级软件开发水平
2026-02-28风口正劲!黑马程序员又一AI智能应用开发班毕业当天100%就业!
2026-02-27