外观
系统升级提示 🔄
功能介绍 💡
在系统进行维护、升级或需要强制客户端更新版本时,可以通过配置 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$).*$来实现“不等于”的逻辑。
验证方法
允许访问的情况: 发送请求到
/demo/test,并设置 Headerversion: v123。- 结果:请求正常通过网关,不被拦截。
被拦截的情况: 发送请求到
/demo/test,设置 Headerversion: v122(或其他值),或者不传 version 头。- 结果:返回
{"code":-1,"msg":"系统升级中"}。
- 结果:返回