介绍
:::tips GlobalFilter称为全局过滤器,与GatewayFilter一样,也是处理一切进入网关的请求和微服务响应
GatewayFilter是通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑是通过代码实现的
SpringCloudGateway核心的功能也是通过内置的全局过滤器来完成的
:::
使用
:::tips 当系统默认的过滤器满足不了业务的时候,可以自定义过滤器,既可以自定义全局过滤器,也可以自定义局部过滤器。自定义局部的很少使用,下面演示的是全局过滤器的使用
先创建一个过滤器类,继承GlobalFilter接口(编写过滤规则)、Ordered接口(决定过滤器的顺序),然后重写这两个接口提供的方法 :::
//注册到Spring容器@Componentpublic class XxxFilter implements GlobalFilter,Ordered {/*** 过滤规则,来源于GlobalFilter接口** @param exchange: 获得web对象的 eg: 请求对象 响应对象* @param chain: 过滤器链* @return*/@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//获取请求对象、响应对象ServerHttpRequest request = exchange.getRequest();ServerHttpResponse response = exchange.getResponse();//拦截请求的逻辑//响应状态码,HttpStatus.UNAUTHORIZED是状态码401response.setStatusCode(HttpStatus.UNAUTHORIZED);//完成响应return response.setComplete();//放行的逻辑return chain.filter(exchange);}/*** 定义过滤器顺序的方法,来源于Ordered接口** @return 返回值越小,优先级越高*/@Overridepublic int getOrder() {return 0;}}
