Filter的使用

it2025-09-24  2

Filter的使用

是什么Spring Cloud Gateway的Filter常用的GatewayFilter 自定义过滤器测试

是什么

路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。Spring Cloud Gateway内置了多种路由过滤器,他们由 Gateway Filter的工厂类来产生

Spring Cloud Gateway的Filter

生命周期只有pre(在业务逻辑之前)、post(在业务逻辑之后)

种类只有GatewayFilter(单一)、GlobalFilter(全局)

常用的GatewayFilter

因为有31种之多,并且一般都是用的自定义的filter,所以这里只举例怎么去使用。


自定义过滤器

主要是要实现两个接口 GlobalFilter ,Ordered

/** * 自定义全局GlobalFilter */ @Component @Slf4j public class MyLogGateWayFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("*********come in MyLogGateWayFilter: "+new Date()); /** * 要求请求必须带有参数username且值不能为空 * 例如:http://localhost:9527/payment/lb?username=w(这是正确的) */ String username = exchange.getRequest().getQueryParams().getFirst("username"); if(StringUtils.isEmpty(username)){ log.info("*****用户名为Null 非法用户,(┬_┬)"); exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);//给人家一个回应 return exchange.getResponse().setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return 0;//过滤链顺序 数字越小 越先 } }

测试

1、启动

2、访问http://localhost:9527/payment/lb?username=z3这是正确的

3、http://localhost:9527/payment/lb?me=z3这是错误的,因为没有username。

最新回复(0)