Skip to content

系统升级提示 🔄

功能介绍 💡

在系统进行维护、升级或需要强制客户端更新版本时,可以通过配置 check 过滤器来拦截请求,并返回自定义的提示信息。

本示例展示了如何通过请求头中的版本号控制访问,实现仅允许特定版本访问,其他版本提示系统升级的场景。

配置示例 📝

基于版本号的强制升级

该配置用于拦截非指定版本的请求。例如,当系统发布新版本 v123 后,希望所有非 v123 版本的请求都收到“系统升级中”的提示。

yaml
gateway:
  filter:
    check:
      enabled: true # 是否启用过滤器
      rules:
        - urls: 
          - /demo/** # 需要检测的接口路径,支持 AntPath 匹配
          result: '{"code":-1,"msg":"系统升级中"}' # 拦截后返回的 JSON 数据
          predicates:
            # 断言条件:Header 中的 version 字段不是 v123 时匹配成功
            # ^(?!v123$).*$ 是一个正则表达式,表示不匹配 "v123"
            # 只有当 version=v123 时,断言失败,请求才会放行;否则都会被拦截
            - Header=version,^(?!v123$).*$

全站维护模式

如果需要对所有请求进行拦截(全站维护),可以简化配置,去掉断言条件:

yaml
gateway:
  filter:
    check:
      enabled: true
      rules:
        - urls: 
          - /** # 拦截所有接口
          result: '{"code":503,"msg":"系统正在维护中,请稍后重试"}'
          status-code: 503 # 设置 HTTP 状态码为 503 Service Unavailable

关键参数说明

  • urls: 定义生效的接口范围。
  • result: 自定义拦截后返回给客户端的响应体内容。
  • status-code: (可选) 自定义响应的 HTTP 状态码,默认为 200。
  • predicates: (可选) 匹配条件。
    • Header=key,regex: 检查请求头。示例中使用了负向预查正则 ^(?!v123$).*$ 来实现“不等于”的逻辑。

验证方法

  1. 允许访问的情况: 发送请求到 /demo/test,并设置 Header version: v123

    • 结果:请求正常通过网关,不被拦截。
  2. 被拦截的情况: 发送请求到 /demo/test,设置 Header version: v122 (或其他值),或者不传 version 头。

    • 结果:返回 {"code":-1,"msg":"系统升级中"}