Filter的使用
程序员文章站
2022-03-14 10:15:00
...
Filter的使用
是什么
- 路由过滤器可用于修改进入的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。
上一篇: Spring依赖注入实现工厂模式
下一篇: 洛谷p3817 小A的糖果