攔截
所有 HandlerMapping
實現都支援處理器攔截,這在您希望跨請求應用功能時非常有用。HandlerInterceptor
可以實現以下介面/方法:
-
preHandle(..)
— 實際處理器執行前的回撥,返回布林值。如果方法返回true
,則繼續執行;如果返回false
,則跳過執行鏈的其餘部分,並且不呼叫處理器。 -
postHandle(..)
— 處理器執行後的回撥。 -
afterCompletion(..)
— 完整請求處理後的回撥。
對於 @ResponseBody 和 ResponseEntity 控制器方法,響應會在呼叫 postHandle 之前在 HandlerAdapter 中寫入並提交。這意味著更改響應(例如新增額外的頭部)已經太晚了。您可以實現 ResponseBodyAdvice 並將其宣告為一個 Controller Advice bean,或者直接在 RequestMappingHandlerAdapter 上配置它。 |
請參閱 MVC 配置章節中的攔截器,瞭解如何配置攔截器的示例。您也可以直接在各個 HandlerMapping
實現上使用 setter 方法註冊它們。
攔截器並非理想的安全層,因為可能與註解式控制器的路徑匹配不一致。通常,我們建議使用 Spring Security,或者採用類似的方法與 Servlet 過濾器鏈整合,並儘可能早地應用。 |