Spring Cloud Gateway过滤器GlobalFilter详解

一、过滤器的场景

在springCloud架构中,网关是必不可少的组件,它用于服务路由的转发。对客户端进行屏蔽微服务的具体细节,客户端只需要和网关进行交互。所以网关顾名思义,就是网络的一个关卡。它就是一座城的城门守卫。所以这个守卫就可以做很多工作,比如对来访者身份的认证,盘查等。最后才是放行。所以在微服务开发中,我们可以在这一层做过滤器,这是非常好的场景。

二、 GatewayFilter与GlobalFilter

Spring Cloud Gateway 根据作用范围划分为 GatewayFilter 和 GlobalFilter,二者区别如下:

  1. GatewayFilter : 需要通过spring.cloud.routes.filters 配置在具体路由下,只作用在当前路由上或通过spring.cloud.default-filters配置在全局,作用在所有路由上。
  2. GlobalFilter : 不需要在配置文件中配置,作用在所有的路由上,最终通过GatewayFilterAdapter包装成GatewayFilterChain可识别的过滤器,它为请求业务以及路由的URI转换为真实业务服务的请求地址的核心过滤器,不需要配置,系统初始化时加载,并作用在每个路由上。

GlobalFilter应用

@Component
public class TestGlobalFilter implements GlobalFilter, Ordered {

	@Override
	public int getOrder() {
		return 0;
	}

	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

		ServerHttpRequest request = exchange.getRequest();
		
		ServerHttpResponse response = exchange.getResponse();
		
		//获取url
		String path = request.getURI().getPath();
		//获取请求头中信息
		String source =  request.getHeaders().getFirst("source");
		
		//做一些动作和业务
		
		return chain.filter(exchange);
	}

}

猜你喜欢

转载自blog.csdn.net/dongjing991/article/details/132143373
今日推荐