HandlerInterceptor和WebRequestInterceptor之间的区别?

时间:2016-02-27 04:33:45

标签: java spring spring-mvc servlet-3.0

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

我注意到HandlerInterceptor方法采用HttpServletRequestHttpServletResponseObject(处理程序)和其他参数 虽然WebRequestInterceptorWebRequestHttpServletRequest的包装)。

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

虽然看到Spring API我可以猜测WebRequestInterceptor无法提交响应,而HandlerInterceptor可以做到这一点。如果我错了,请在这里纠正我。

1 个答案:

答案 0 :(得分:9)

使用HandlerInterceptor,您可以:

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

HandlerInterceptor可用于大量预处理方面,例如用于授权检查,或常见的处理程序行为,如区域设置,主题更改或添加Cache-Control标头。其主要目的是允许分解重复的处理程序代码。

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

  

虽然看到Spring API我可以猜到WebRequestInterceptor可以   HandlerInterceptor可以做到这一点时不提交响应。请   如果我错了,请在此纠正我。

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