Skip to content

F. 中间件执行顺序 ​

说明

全局中间件链(顺序勿动):trace → CORS → metrics → response → ratelimit → demo → JWT → tenant → authz → operation_log。每个请求按此顺序穿过。

执行表 ​

#中间件职责拦截行为ctx 写入
1Tracetrace_id + 请求元信息不拦截trace_id、IP、UA、方法、URL
2CORS跨域响应头OPTIONS 204 终止无
3MetricsPrometheus 计数/耗时不拦截无
4Response统一信封 + panic 恢复错误时写信封终止响应码/体记录
5RateLimit固定窗口限流超限拒绝拒绝原因
6Demo演示模式拒写非 GET/HEAD/OPTIONS 且非公开路径拒绝无
7JWT令牌解析、身份注入401身份、jti/exp、角色权限
8Tenant租户状态校验禁用/过期拒绝无(读身份)
9Authz功能权限校验403拒绝原因
10OperationLog操作日志异步落库不拦截无(读响应记录)

另有链外兜底:gin.CustomRecovery(静态资源等业务链之外的 panic)。

顺序约束理由 ​

  • trace 最先:后续一切日志依赖 trace_id
  • Response 在业务前:panic 恢复包住全部 handler;错误出口统一
  • ratelimit/demo 在身份前:防未认证高频攻击
  • JWT → tenant → authz 逐层依赖前置注入的身份
  • operation_log 链尾:须读到最终响应才采集

免登录判定(IsPublicRequest) ​

两个来源汇合:

来源内容
基础设施白名单/api/health、/api.json、/swagger*、/metrics
路由元数据RouteSpec.Public=true(登录/验证码/令牌兑换)

拒绝类请求的可观测差异 ​

拒绝操作日志metrics 归类
限流 / 权限 403不记录denied
租户拒绝不记录error
未认证 401不记录—(JWT 层)

相关 ​

小蚂蚁云团队 · 提供技术支持