网关过滤器

简介: 网关鉴权需在请求转发前完成。通过理解Gateway原理,利用GlobalFilter或GatewayFilter,在NettyRoutingFilter之前执行身份校验,实现安全控制。过滤器通过pre逻辑拦截请求,确保鉴权通过后才路由至微服务,保障系统安全。

网关鉴权必须在请求转发到微服务之前做,否则就失去了意义。而网关的请求转发是Gateway内部代码实现的,要想在请求转发之前做身份校验,就必须了解Gateway内部工作的基本原理。

  1. 客户端请求进入网关后由HandlerMapping对请求做判断,找到与当前请求匹配的路由规则(Route),然后将请求交给WebHandler去处理。
  2. WebHandler则会加载当前路由下需要执行的过滤器链(Filter chain),然后按照顺序逐一执行过滤器(后面称为Filter)。
  3. Filter内部的逻辑分为pre和post两部分,分别会在请求路由到微服务之前和之后被执行。
  4. 只有所有Filter的pre逻辑都依次顺序执行通过后,请求才会被路由到微服务。
  5. 微服务返回结果后,再倒序执行Filter的post逻辑。
  6. 最终把响应结果返回。
    最终请求转发是有一个名为NettyRoutingFilter的过滤器来执行的,而且这个过滤器是整个过滤器链中顺序最靠后的一个。如果我们能够定义一个过滤器,在其中实现身份校验逻辑,并且将过滤器执行顺序定义到NettyRoutingFilter之前,这就符合我们的需求了!
    那么,该如何实现一个网关过滤器呢?
    网关过滤器链中的过滤器有两种:
    ● GatewayFilter:路由过滤器,作用范围比较灵活,可以是任意指定的路由Route.
    ● GlobalFilter:全局过滤器,作用范围是所有路由,不可配置。
    其实GatewayFilter和GlobalFilter这两种过滤器的方法签名完全一致:
    /**
    • 处理请求并将其传递给下一个过滤器
    • @param exchange 当前请求的上下文,其中包含request、response等各种数据
    • @param chain 过滤器链,基于它向下传递请求
    • @return 根据返回值标记当前请求是否被完成或拦截,chain.filter(exchange)就放行了。
      */
      Mono filter(ServerWebExchange exchange, GatewayFilterChain chain);
      FilteringWebHandler在处理请求时,会将GlobalFilter装饰为GatewayFilter,然后放到过滤器链中,排序以后依次执行。
相关文章
|
11月前
|
人工智能 安全 Java
网关鉴权
微服务架构下,用户身份校验需统一处理。基于JWT的网关鉴权将认证集中于网关,避免密钥泄露与代码重复。网关校验Token并透传用户信息,微服务专注权限控制,通过Spring Security注解如`hasAuthority`实现细粒度授权,提升安全与可维护性。(238字)
|
Oracle Java 编译器
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
基本概念【入门、 发展简史、核心优势、各版本的含义、特性和优势、JVM、JRE 和 JDK 】(二)-全面详解(学习总结---从入门到深化)
542 1
|
3月前
|
缓存 边缘计算 安全
新版阿里云CDN深度解析:全球节点+智能调度+安全防护+边缘计算一站式加速实操指南
互联网业务全球化发展背景之下,网页站点、音视频点播直播、APP下载、电商动态接口、游戏实时通信等业务对访问延迟、可用性、安全防护提出越来越高的要求。传统源站直连模式,跨地域、跨运营商访问延迟高,突发流量容易打垮源站,同时缺少配套攻击防护能力。新版CDN完成全方位能力升级,不再只是简单静态内容缓存分发工具,进化为集**全球网络调度、边缘智能缓存、动态内容加速、全链路安全防护、可编程边缘计算、自动化运维**于一体的一体化边缘基础设施。依托全球3200+边缘节点、180Tbps+弹性出口带宽,覆盖70余个国家与地区,同时兼容静态资源、动态API、音视频、四层实时通信各类业务。本文从全球网络与智能调度
282 0
|
4月前
|
Java Nacos 数据安全/隐私保护
MSE + Nacos 实战:微服务治理从混乱到有序的完整路径
50+ 微服务上线后治理失控——配置变更导致 3 次 P0 故障,服务间调用链路无人能说清,限流降级全靠"祈祷式运维"。引入阿里云 MSE 微服务引擎 + Nacos 后,配置灰度发布让变更零风险,全链路拓扑实时可见,无损上下线消灭发布抖动,标签路由实现全链路灰度。本文以一个中型金融科技平台为案例,从痛点剖析、架构设计、Nacos 配置中心实战、MSE 服务治理实战、Spring Cloud Alibaba 集成到 5 个生产踩坑实录,完整呈现微服务治理从混乱到有序的落地路径。
|
5月前
|
存储 消息中间件 SQL
Java在分布式链路追踪系统(Jaeger)中的实现与集成
微服务架构中,一个用户请求可能跨越多达几十个服务。当出现延迟增加或错误时,难以定位具体哪个服务出问题。
253 5
|
11月前
|
安全 算法 Java
内置过滤器
Spring Cloud Gateway内置多种GatewayFilter,用于请求路由、过滤与响应处理,如AddRequestHeader、StripPrefix等,可灵活实现路径重写、请求限流等功能,结合路由配置满足各类微服务场景需求。
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
1046 0
在Java中处理JSON数据:Jackson与Gson库比较
|
11月前
|
Java Spring
Spring Boot配置的优先级
SpringBoot项目支持多种配置方式,主要包括配置文件(application.properties、yml、yaml)和外部配置(系统属性、命令行参数)。优先级从高到低为:命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml。
|
uml
UML类图的 绘制标准 及 绘制工具
讲解绘制类图的标准,以及如何使用ProcessOn(在线工具 无需下载)轻松绘制类图
1032 0
|
存储 缓存 JSON
基于EFK的Kubernetes日志采集方案
在本篇文章中,您将学习 Kubernetes 集群日志中涉及的关键概念和工作流。
2753 0
基于EFK的Kubernetes日志采集方案