HandlerInterceptor 和 WebRequestInterceptor 的区别?

Difference between HandlerInterceptor and WebRequestInterceptor?

在为我的应用程序编写拦截器时,我注意到 HandlerInterceptorWebRequestInterceptor here

我注意到 HandlerInterceptor 的方法采用 HttpServletRequestHttpServletResponseObject(handler) 和其他参数 而 WebRequestInterceptor 采用 WebRequestHttpServletRequest 的包装)。

但是我不知道这两个拦截器有什么区别

虽然看到 Spring API 我可以猜测 WebRequestInterceptor 不能提交响应,而 HandlerInterceptor 可以。如有不妥请指正

有了 HandlerInterceptor 你可以:

  • 更改 preHandle 方法中的 HttpServletResponse
  • 根据 handler object 应用过滤器。例如,您可以根据 HandlerMethod
  • 上是否存在某些注释来应用一些过滤器
  • 通过在 preHandle 方法中返回 false 来禁止处理程序的执行。

HandlerInterceptor可用于大范围的预处理方面,例如用于授权检查,或常见的处理程序行为,如语言环境、主题更改或添加 Cache-Control headers。它的主要目的是允许分解出重复的处理程序代码。

WebRequestInterceptor 的典型用例之一是准备上下文资源(例如 Hibernate Session)并将它们公开为请求属性或 thread-local object秒。此外,您可以在处理程序成功执行后修改这些上下文资源(例如,刷新 Hibernate Session)。例如,OpenEntityManagerInViewInterceptor 将 JPA EntityManager 绑定到线程以进行整个请求处理。

Although seeing Spring API I can guess that WebRequestInterceptor can not commit response while HandlerInterceptor can do that. Please correct me here if I am wrong.

WebRequestInterceptor 接口是故意简约的,以保持通用请求拦截器的依赖性尽可能小。如果您需要更改响应,您应该使用 HandlerIntercepterFilters.