请说明使用 Spring Cloud Gateway 自定义 GlobalFilter 保护接口的具体实现过程,包括如何编写过滤器、注册顺序以及实现鉴权或限流等防护逻辑。
考察说明
考查对 Spring Cloud Gateway 自定义 GlobalFilter 的理解和实际编码能力。
回答思路
- 【回答框架 1】GlobalFilter 是 Gateway 全局过滤器,对进入网关的所有请求生效,可通过实现 GlobalFilter 和 Ordered 接口来编写自定义过滤器。核心是重写 filter 方法,在链路中执行前置或后置逻辑,并通过 GatewayFilterChain 继续传递请求。
- 【回答框架 2】实现鉴权时,在 filter 方法中从 ServerWebExchange 获取请求头或参数,校验 token 等凭据。校验通过则调用 chain.filter(exchange),否则返回 401 响应。可按业务需要设置过滤器优先级,通过 getOrder 方法控制顺序,数值越小越先执行。
- 【回答框架 3】限流等保护可通过配合 RequestRateLimiter 或结合 Redis 实现计数器,在过滤器中检查请求频率,超过阈值则返回 429。需注意全局过滤器对所有路由生效,若要精细控制,可实现 GatewayFilter 并绑定具体路由。
- 【回答框架 4】实践中需处理响应写入和编码,设置响应状态和 body。还要考虑异常处理,避免过滤器抛出异常导致错误响应。可添加日志记录,便于追踪。
- 【关键点 1】实现 GlobalFilter 和 Ordered 接口,重写 filter 方法。
- 【关键点 2】从 exchange 获取请求信息,进行鉴权或限流。
- 【关键点 3】校验通过调用 chain.filter(exchange),否则返回错误响应。
- 【关键点 4】通过 getOrder 控制过滤器执行顺序。
- 【易错点 1】全局过滤器对所有请求生效,需注意性能影响。
- 【易错点 2】响应写入时需正确设置 Content-Type 并避免缓冲问题。
- 【易错点 3】校验逻辑不要只依赖显式参数,应结合安全上下文。