2016-02-27 659 views
4

在爲我的應用程序編寫攔截器時,我注意到HandlerInterceptorWebRequestInterceptorhereHandlerInterceptor和WebRequestInterceptor之間的區別?

我注意到HandlerInterceptor「s法採取HttpServletRequestHttpServletResponseObject(處理程序)以及其它PARAMS 而WebRequestInterceptor採取WebRequest(的HttpServletRequest的包裝)。

但我不知道這兩個攔截器有什麼區別。

儘管看到Spring API,我可以猜想WebRequestInterceptor不能提交響應,而HandlerInterceptor可以做到這一點。如果我錯了,請在這裏糾正我。

回答

7

隨着HandlerInterceptor,您可以:

  • 更改HttpServletResponsepreHandle方法
  • 應用基於handler對象的過濾器。例如,您可以基於某些註釋的存在應用某些過濾器HandlerMethod
  • 通過preHandle方法禁止執行處理程序,方法是返回false

HandlerInterceptor可以用於大範圍的預處理方面,例如,用於授權檢查或常見處理程序行爲,如語言環境,主題更改或添加頭文件。它的主要目的是允許分解重複的處理程序代碼。

WebRequestInterceptor的規範用例之一是準備上下文資源(如Hibernate Session),並將它們公開爲請求屬性或線程本地對象。此外,您可以在成功處理程序執行後修改這些上下文資源(例如,刷新休眠Session)。例如,OpenEntityManagerInViewInterceptor將JPA EntityManager綁定到整個請求處理的線程。

儘管看到Spring API,我可以猜測WebRequestInterceptor可以不提交響應,而HandlerInterceptor可以做到這一點。如果我錯了,請在這裏糾正我的錯誤。

WebRequestInterceptor接口故意簡約以保持通用請求攔截器的依賴性儘可能小。如果您需要更改回復,則應使用HandlerIntercepterFilter s。

+0

是的,我也在這裏:http://docs.spring.io/spring-framework/docs/2.0.8/api/org/springframework/web/context/request/class-use/WebRequestInterceptor.html 。但我的意思是它只是爲了這個目的? – optional

+1

並且在'WebRequestInterceptor'中,你可以修改模型而不是迴應 –

+0

正是這就是我所要求的,這就是爲什麼它的方法簽名中沒有任何響應參數(** HttpServletResponse **) – optional

相關問題