深入理解Spring Cloud Gateway全局过滤器:自定义MyGlobalFilter实现
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;
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 自定义过滤逻辑,例如检查请求参数是否合法
String paramValue = exchange.getRequest().getQueryParams().getFirst("param");
if (paramValue == null || !paramValue.equals("expectedValue")) {
// 如果参数不符合要求,返回400 Bad Request
exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);
return exchange.getResponse().setComplete();
}
// 如果参数符合要求,继续执行后续过滤器和路由
return chain.filter(exchange);
}
@Override
public int getOrder() {
// 定义过滤器的顺序,数值越小,优先级越高
return -1;
}
}
这段代码定义了一个名为MyGlobalFilter
的全局过滤器,实现了GlobalFilter
和Ordered
接口。它检查请求中的param
参数是否等于expectedValue
。如果不符合条件,则返回HTTP状态码400 Bad Request
。如果参数符合要求,则继续执行后续的过滤器和路由。通过实现getOrder()
方法,开发者可以控制过滤器的执行顺序。这个自定义的过滤器可以被用来实现各种前置逻辑,例如权限校验、请求日志记录等。
评论已关闭