攔截

所有 HandlerMapping 實現都支援處理器攔截,這在您希望跨請求應用功能時非常有用。HandlerInterceptor 可以實現以下方法:

  • preHandle(..) — 在實際處理器執行之前的回撥,返回一個布林值。如果方法返回 true,則繼續執行;如果返回 false,則跳過執行鏈的其餘部分,不呼叫處理器。

  • postHandle(..) — 在處理器執行後的回撥。

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

對於 @ResponseBodyResponseEntity 控制器方法,響應會在 HandlerAdapter 中寫入並提交,此時 postHandle 尚未被呼叫。這意味著更改響應(例如新增額外的頭)為時已晚。您可以實現 ResponseBodyAdvice 並將其宣告為 Controller Advice bean,或者直接在 RequestMappingHandlerAdapter 上進行配置。

有關如何配置攔截器的示例,請參閱 MVC 配置部分中的攔截器。您也可以透過在各個 HandlerMapping 實現上使用 setter 直接註冊它們。

攔截器不適合作為安全層,因為它們與註解的控制器路徑匹配可能存在不匹配。通常,我們建議使用 Spring Security,或者採用類似的方法與 Servlet 過濾器鏈整合,並儘早應用。
© . This site is unofficial and not affiliated with VMware.