生命周期只有pre(在业务逻辑之前)、post(在业务逻辑之后)
种类只有GatewayFilter(单一)、GlobalFilter(全局)
因为有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。