sa-token + spring cloud gateway 过滤器顺序问题

查看 8|回复 0
作者:nitouge   
执行顺序(从小到大):
1.TRACE_ID_ORDER - 生成 TraceId (最高优先级)
2.BLACK_LIST_ORDER - 黑名单检查(尽早拦截)
3.REQUEST_CONTEXT_ORDER - 缓存请求体(为后续过滤器提供数据)
4.XSS_INJECTION_ORDER - XSS 注入检查
5.SQL_INJECTION_ORDER - SQL 注入检查
6.RATE_LIMITER_ORDER - 限流检查
7.API_LOG_ORDER - API 日志记录
8.AUTH_ORDER - Sa-Token 认证鉴权
9.JWT_BLACKLIST_ORDER - JWT 黑名单检查
10.FORWARD_AUTH_ORDER - 转发认证信息
11.业务处理
12.RESPONSE_CONTEXT_ORDER - 缓存响应体
13.REMOVE_CONTEXT_ORDER - 清理上下文(最低优先级)
Auth 是 WebFilter ( SaReactorFilter )”这一点决定了它一定会先于所有 GlobalFilter 执行。也就是说,按你写的序列把 Auth 放在第 8 位( TraceId 、黑名单、注入之后)是做不到的,除非把认证改造成 GlobalFilter (不走 SaReactorFilter )。所以:
如果保留 Sa-Token 的 SaReactorFilter (推荐做法),实际顺序一定是:WebFilter 阶段先认证,再进入 GlobalFilter 阶段做 TraceId/黑名单/注入/限流/日志等。
你给出的序列可作为 GlobalFilter 之间的相对顺序,但无法跨越 WebFilter 与 GlobalFilter 的边界
如果认证( Auth )放在最前面,未认证或非法请求可能直接被拦截,导致 API 日志和上下文处理没有执行
我这个 filter 顺序是否有问题,下面是整理的部分
[td]Filter[/td]
[td]类型[/td]
[td]依赖[/td]
[td]推荐 order[/td]
CORS
WebFilter
-
Integer.MIN_VALUE
Auth(Sa-Token)
WebFilter
-
-101
Actuator
WebFilter
-
-100 (可选)
TraceId
GlobalFilter

Integer.MIN_VALUE
RequestContext
GlobalFilter
TraceId
Integer.MIN_VALUE+20
Blacklist
GlobalFilter/WebFilter
可依赖 Auth
Integer.MIN_VALUE+10(GlobalFilter)
XSS Injection
GlobalFilter
RequestContext
Integer.MIN_VALUE+30
SQL Injection
GlobalFilter
RequestContext
Integer.MIN_VALUE+40
Rate Limiter
GlobalFilter
RequestContext / IP
Integer.MIN_VALUE+50
API Log
GlobalFilter
RequestContext
Integer.MIN_VALUE+60
JWT Blacklist
GlobalFilter
Auth
-90
Forward Auth
GlobalFilter
Auth
-80
Business
路由转发
-
-
ResponseContext
GlobalFilter
RequestContext
WRITE_RESPONSE_FILTER_ORDER-1
RemoveContext
GlobalFilter
全局上下文
Integer.MAX_VALUE
您需要登录后才可以回帖 登录 | 立即注册

返回顶部