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