今日代码大赏 | Spring Cloud Gateway 全局过滤器实现

在构建微服务架构时,Spring Cloud Gateway 作为服务网关,承担着路由转发、权限校验等职责。

全局过滤器(Global Filter)是 Spring Cloud Gateway 中用于处理跨服务的通用逻辑的组件,例如权限验证、日志记录等。

下面是Spring Cloud Gateway中实现全局过滤器的示例代码:

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.nio.charset.StandardCharsets;

@Component
public class GlobalAuthFilter implements GlobalFilter, Ordered {

    private AntPathMatcher antPathMatcher = new AntPathMatcher();

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest serverHttpRequest = exchange.getRequest();
        String path = serverHttpRequest.getURI().getPath();
        // 判断路径中是否包含 "inner",只允许内部调用
        if (antPathMatcher.match("/**/inner/**", path)) {
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.FORBIDDEN);
            DataBufferFactory dataBufferFactory = response.bufferFactory();
            DataBuffer dataBuffer = dataBufferFactory.wrap("无权限".getBytes(StandardCharsets.UTF_8));
            return response.writeWith(Mono.just(dataBuffer));
        }
        // 统一权限校验,此处应添加JWT等验证逻辑
        // todo 统一权限校验,通过 JWT 获取登录用户信息
        return chain.filter(exchange);
    }

    /**
     * 设置过滤器的优先级
     * 值越小,优先级越高
     * @return
     */

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

全局过滤器的优点

  • • 统一处理:可以在一个地方集中处理所有请求的预处理和后处理逻辑。

  • • 顺序可控:通过实现 Ordered 接口,可以控制过滤器的执行顺序。

今天的代码大赏就到这里。希望通过这篇文章,你能够对 Spring Cloud Gateway 全局过滤器实现有一个更深入的理解。

完整代码片段来源于代码小抄,欢迎点击进入小程序阅读!

  在线访问:https://www.codecopy.cn/post/kt2g78

在代码小抄可以看到更多优质代码,也欢迎大家积极分享,可能会获得我们官方的小礼品 🎁~

往期推荐

今日代码大赏 | Java 序列化

今日代码大赏 | 工厂方法模式

今日代码大赏 | Git 常用命令

今日代码大赏 | Spring Boot 健康检查接口

今日代码大赏 | Java 获取客户端 IP 地址

相关推荐

  • 学习力不从心,如何做好时间管理?
  • 有了这玩意,分分钟开发公众号功能!
  • 30%参数达到92%的表现,大模型稀疏化方法显神通
  • 两重惊喜!奥特曼预告GPT-4和ChatGPT重大更新,Open AI要放大招
  • 大语言模型应用指南:以ChatGPT为起点,从入门到精通的AI实践教程
  • 【小象AI第11讲】5月20日,智能化闭环:RPA + LLM驱动业务流革新
  • 【小象AI第10讲】5 月16日,AI知识管理:如何快速搭建你的私域知识库
  • 突发!美国拟限制「开源 AI 大模型出口」:你或无法使用
  • 牛掰,程序员Ben被封号了。。
  • “如果你看空,还做什么投资?”
  • 86岁「最会赚钱的数学家」Jim Simons去世,量化投资一代传奇落幕!
  • OpenAI重磅更新定档下周一,奥特曼暗示会有「魔法」!
  • KAN核心团队震撼力作!MIT华人用AI首次发现物理学全新方程
  • WPS回应套娃式收费:AI功能投入比较大且福利期已到;Sam Altman辟谣下周发GPT-5和搜索引擎 | 极客头条
  • 使用 C++ 中的 final 关键字,到底能否提升性能?
  • IPv4 地址耗尽,为什么 IPv6 没有广泛将其取代?
  • 突发!美国拟限制“开源 AI 大模型出口”
  • 新能源车企数据中台指标体系建设方法论
  • 小米如何用数据智能驱动业务增长
  • 大模型如何为腾讯游戏NPC注入灵魂