springcloud-GateWay的Filter
由于官方提供的路由过滤器太多,只能自己去查;下面是使用官方过滤器的用法:
在实际开发中,用自己自定义的过滤器比较多;比如下面作为参考:
@Component public class MyGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String username = exchange.getRequest().getQueryParams().getFirst("username"); if(username == null){ exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE); return exchange.getResponse().setComplete(); } return chain.filter(exchange); //放行执行下一个过滤器,并把exchange交给下一个过滤器 } @Override public int getOrder() { return 0; } }
是实现一个全局的路由过滤器,需要实现两个接口:GlobalFilter, Ordered,然后覆盖两个方法:
1. filter():当拦截请求时会执行的方法,跟之前的doFilter一样;但是参数和返回值就比较新颖了,是spring5后才提供的
> ServerWebExchange:封装了request,response,session以及其他信息,简单的说就是请求常用相关的对象和数据的封装吧
> Mono<T>:这个有点类似于 统一返回结果的类或接口,作用就是为了统一返回值的类型。
2. getOrder():该方法是用来确定 过滤器 的执行顺序的,当返回值越小, 则过滤器的执行顺序越优先。
总结:一般在开发中,自定义全局路由过滤器会比较多,通常在过滤器里面做 日志记录 和 鉴权 会更多点。