攔截器

所有 HandlerMapping 實作都支援處理器攔截,當您想要跨請求應用功能時,這非常有用。HandlerInterceptor 可以實作以下項目:

  • preHandle(..) — 在實際處理器執行之前回呼,並傳回布林值。如果方法傳回 true,則繼續執行;如果傳回 false,則會略過其餘的執行鏈,且不會呼叫處理器。

  • postHandle(..) — 在處理器執行之後回呼。

  • afterCompletion(..) — 在完整請求完成後回呼。

對於 @ResponseBodyResponseEntity 控制器方法,回應會在 HandlerAdapter 內寫入和提交,然後才呼叫 postHandle。這表示變更回應(例如新增額外的標頭)為時已晚。您可以實作 ResponseBodyAdvice 並將其宣告為 Controller Advice Bean,或直接在 RequestMappingHandlerAdapter 上配置它。

請參閱 MVC 配置章節中的 攔截器,以取得如何配置攔截器的範例。您也可以使用個別 HandlerMapping 實作上的 setter 直接註冊它們。

攔截器並不適合作為安全性層,因為可能與註解控制器路徑比對不符。一般而言,我們建議使用 Spring Security,或與 Servlet 篩選器鏈整合的類似方法,並儘早應用。