服务网关Spring Cloud Gateway -- 全局过滤器

阅读更多

全局过滤器GlobalFilter

        全局过滤器是一系列特殊的过滤器,会根据条件应用到所有路由中。其不需要在配置文件中配置。可以用它来实现很多统一化处理的业务需求,比如权限认证,IP访问限制等等。

 

    GlobalFilter内置的实现类有:

         AdaptCachedBodyGlobalFilter         Integer.MIN_VALUE + 1000         用于缓存请求体的过滤器

        WebClientWriteResponseFilter         -1                                                       处理前缀为http或https的路由

        NettyWriteResponseFilter                   -1                                                       处理前缀为http或https的路由

        ForwardPathFilter                                 0

        RouteToRequestUrlFilter                    10000                                                路由到指定url的过滤器

        LoadBalancerClientFilter                    10100                                               负载均衡客户端过滤器,处理前缀为lb的路由

        WebsocketRoutingFilter                      Integer.MAX_VALUE - 1                处理前缀为ws或wss的路由

        WebClientHttpRoutingFilter                Integer.MAX_VALUE                     处理前缀为http或https的路由

        NettyRoutingFilter                                Integer.MAX_VALUE                      处理前缀为http或https的路由

        ForwardRoutingFilter                          Integer.MAX_VALUE                       转发路由过滤器,处理前缀为forward的路由

 

    自定义全局过滤器:

          自定义全局过滤器需要实现GlobalFilter接口,如果要指定执行顺序,可以同时实现Ordered接口

/**
 * 认证过滤器
 */
//@Component
public class AuthFilter implements GlobalFilter {
	@Override
	public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		String token = exchange.getRequest().getQueryParams().getFirst("token");
        if ("token".equals(token)) {
            return chain.filter(exchange);
        }
        
        //响应报文数据
        Response data = new Response("401", "非法请求");
        byte[] dataArr = JSONObject.fromObject(data).toString().getBytes(StandardCharsets.UTF_8);
        
        ServerHttpResponse httpResponse = exchange.getResponse();
        DataBuffer dataBuffer = httpResponse.bufferFactory().wrap(dataArr);
        httpResponse.setStatusCode(HttpStatus.UNAUTHORIZED);
        httpResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
        return httpResponse.writeWith(Mono.just(dataBuffer));
	}
}

 

         定义过滤器Bean对象:

@Bean
@Order(1)
public AuthFilter getAuthFilter(){
	return new AuthFilter();
}

 

你可能感兴趣的:(服务网关Spring Cloud Gateway -- 全局过滤器)