HandlerInterceptor和WebRequestInterceptor之间的区别?

2022-09-04 02:46:52

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

我注意到 的方法 take, , (handler) 和其他参数, 而 take (的包装器 )。HandlerInterceptorHttpServletRequestHttpServletResponseObjectWebRequestInterceptorWebRequestHttpServletRequest

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

虽然看到Spring API,我可以猜到不能提交响应,而可以做到这一点。如果我错了,请在这里纠正我。WebRequestInterceptorHandlerInterceptor


答案 1

有了 a,您可以:HandlerInterceptor

  • 更改 in 方法HttpServletResponsepreHandle
  • 基于对象应用滤镜。例如,您可以根据handlerHandlerMethod
  • 通过返回 in 方法禁止执行处理程序。falsepreHandle

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

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

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

WebRequestInterceptor接口是故意最小化的,以保持通用请求拦截器的依赖关系尽可能小。如果需要更改响应,则应使用 或 。HandlerIntercepterFilter


答案 2

推荐