HandlerInterceptor 和 WebRequestInterceptor 的区别?
Difference between HandlerInterceptor and WebRequestInterceptor?
在为我的应用程序编写拦截器时,我注意到 HandlerInterceptor
和 WebRequestInterceptor
here。
我注意到 HandlerInterceptor
的方法采用 HttpServletRequest
、HttpServletResponse
、Object
(handler) 和其他参数
而 WebRequestInterceptor
采用 WebRequest
(HttpServletRequest
的包装)。
但是我不知道这两个拦截器有什么区别
虽然看到 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
接口是故意简约的,以保持通用请求拦截器的依赖性尽可能小。如果您需要更改响应,您应该使用 HandlerIntercepter
或 Filter
s.
在为我的应用程序编写拦截器时,我注意到 HandlerInterceptor
和 WebRequestInterceptor
here。
我注意到 HandlerInterceptor
的方法采用 HttpServletRequest
、HttpServletResponse
、Object
(handler) 和其他参数
而 WebRequestInterceptor
采用 WebRequest
(HttpServletRequest
的包装)。
但是我不知道这两个拦截器有什么区别
虽然看到 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
接口是故意简约的,以保持通用请求拦截器的依赖性尽可能小。如果您需要更改响应,您应该使用 HandlerIntercepter
或 Filter
s.