1. Filter
1.1 是什么
路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。
Spring Cloud Gateway内置了多种过滤器,他们都由GatewayFilter的工厂类来产生。
1.2 Spring Cloud Gateway的Filter
生命周期
在业务逻辑之前:pre
在业务逻辑之后:post
种类
GatewayFilter:单一
GlobalFilter:全局
2. 常用的GatewayFilter
AddRequestParameter
过滤器工厂会在匹配的请求头上加上一对请求头,名称为X-Request-red,值为blue
自定义全局GlobalFilter
全局日志记录
统一网关鉴权
代码
package com.lele.springcloud.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.Date;
/**
* @author: lele
* @date: 2021/3/25 22:24
* @description:
*/
@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("******come in MyLogGatewayFilter: "+new Date());
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
log.info("******用户名为null,非法用户。");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}