一、流程總覽
該流程圖描述了一個多層攔截器鏈的業務處理流程,核心邏輯為:
- 前置攔截:通過
predHandler1
和predHandler2
逐層校驗請求合法性。 - 核心處理:通過校驗后執行核心業務邏輯
handler()
。 - 后置處理與清理:按反向順序執行后置操作,最終完成資源釋放。
二、模塊功能與業務場景
1. 前置攔截模塊
predHandler1()
- 業務作用:執行第一層基礎校驗(如用戶身份驗證、請求合法性檢查)。
- 邏輯分支:
- **返回 **
false
:請求非法或校驗失敗,直接終止流程(如用戶未登錄時返回401錯誤)。 - **返回 **
true
:進入下一層校驗predHandler2()
。
- **返回 **
predHandler2()
- 業務作用:執行第二層精細化校驗(如權限校驗、參數合規性驗證)。
- 邏輯分支:
- **返回 **
false
:校驗失敗,僅觸發afterCompletion1()
(如記錄失敗日志),流程終止。 - **返回 **
true
:進入核心業務處理handler()
。
- **返回 **
2. 核心業務模塊
handler()
- 業務作用:執行實際業務邏輯(如數據計算、數據庫操作、服務調用)。
- 觸發條件:所有前置攔截器均通過(
predHandler1
和predHandler2
均返回true
)。
3. 后置處理模塊
postHandler2()
- 業務作用:內層后置操作(如修改響應數據、記錄操作日志)。
- 執行順序:優先于外層后置操作(
postHandler1()
),確保依賴資源可用。
postHandler1()
- 業務作用:外層后置操作(如統計請求耗時、格式化最終響應)。
4. 完成清理模塊
afterCompletion1()
- 業務作用:外層資源釋放(如關閉數據庫連接、清理臨時文件)。
- 觸發條件:只要
predHandler1
返回true
,無論后續流程是否成功,均會執行。
afterCompletion2()
- 業務作用:內層資源釋放(如提交事務、關閉內層連接)。
- 觸發條件:
predHandler2
返回true
且流程執行到handler()
后。
三、流程分支詳解
分支 1:predHandler1
** 返回 **false
- 路徑:
predHandler1 → 直接響應
- 業務意義:基礎校驗失敗,無需后續處理(如用戶未登錄時直接拒絕請求)。
分支 2:predHandler2
** 返回 **false
- 路徑:
predHandler1 → predHandler2 → afterCompletion1
- 業務意義:精細化校驗失敗(如用戶無權限),但需釋放外層資源(如記錄失敗日志)。
分支 3:所有攔截通過
- 路徑:
predHandler1 → predHandler2 → handler → postHandler2 → postHandler1 → afterCompletion2
- 業務意義:完整處理請求,按反向順序釋放資源(如先提交事務,再關閉連接)。
四、流程設計的關鍵邏輯
- 前置順序正向,后置順序反向
- 前置鏈:由外到內逐層校驗(
predHandler1 → predHandler2
),確保基礎條件優先驗證。 - 后置鏈:由內到外反向執行(
postHandler2 → postHandler1
),避免依賴資源提前釋放。
- 前置鏈:由外到內逐層校驗(
- 資源釋放的精準性
- 外層資源(如數據庫連接)在
afterCompletion1
釋放。 - 內層資源(如事務)在
afterCompletion2
釋放,確保提交事務后再關閉連接。
- 外層資源(如數據庫連接)在
五、實際應用場景
- API 請求校驗鏈
predHandler1
:驗證 Token 有效性 →predHandler2
:校驗用戶角色權限 →handler
:返回數據。- 若角色權限不足,記錄日志(
afterCompletion1
)并終止流程。
- 事務管理流程
predHandler1
:打開數據庫連接 →predHandler2
:開啟事務 →handler
:執行業務 SQL。postHandler2
:提交事務 →postHandler1
:關閉連接。