0%

Spring Cloud Gateway自定义全局过滤器方法

如果我们希望拦截请求,做自己的业务逻辑,Spring Cloud Gateway中默认的过滤器就没办法实现。此时,就需求使用全局过滤器,全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。

以下是个配置自定义全局过滤器并在过滤器内部处理业务逻辑的示例:

  • 需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

请求参数中是否有username,如果满足则放行,否则拦截

  • 步骤分析:

1、定义一个类实现GlobalFilter接口

2、重写filter方法

3、将该类纳入到spring容器中

4、实现Ordered接口定义该过滤器的顺序

  • 实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Component
public class AuthorizationFilter implements GlobalFilter, Ordered {

//实现过滤器逻辑
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String username = exchange.getRequest().getQueryParams().getFirst("username");
if(!StringUtils.hasText(username)){
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}

//定义该过滤器的顺序
@Override
public int getOrder() {
return 0;
}
}
-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道