在为我的应用程序编写拦截器时,我注意到HandlerInterceptor
和WebRequestInterceptor
here。
我注意到HandlerInterceptor
方法采用HttpServletRequest
,HttpServletResponse
,Object
(处理程序)和其他参数
虽然WebRequestInterceptor
取WebRequest
(HttpServletRequest
的包装)。
但我不知道这两个拦截器之间有什么区别。
虽然看到Spring API我可以猜测WebRequestInterceptor
无法提交响应,而HandlerInterceptor
可以做到这一点。如果我错了,请在这里纠正我。
答案 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
接口是故意简约的,以保持通用请求拦截器的依赖性尽可能小。如果您需要更改回复,则应使用HandlerIntercepter
或Filter
s。