Java HandlerInterceptor和WebRequestInterceptor之间的区别?
在为我的应用程序编写拦截器时,我注意到Java HandlerInterceptor和WebRequestInterceptor之间的区别?,java,spring,spring-mvc,servlet-3.0,Java,Spring,Spring Mvc,Servlet 3.0,在为我的应用程序编写拦截器时,我注意到HandlerInterceptor和WebRequestInterceptor 我注意到,HandlerInterceptor的方法采用了HttpServletRequest、HttpServletResponse、对象(handler)和其他参数 而WebRequestInterceptortakeWebRequest(HttpServletRequest的包装) 但我不知道这两个拦截器之间有什么区别 虽然看到了SpringAPI,但我可以猜测WebRe
HandlerInterceptor
和WebRequestInterceptor
我注意到,HandlerInterceptor
的方法采用了HttpServletRequest
、HttpServletResponse
、对象(handler)和其他参数
而WebRequestInterceptor
takeWebRequest
(HttpServletRequest的包装)
但我不知道这两个拦截器之间有什么区别
虽然看到了SpringAPI,但我可以猜测WebRequestInterceptor
不能提交响应,而HandlerInterceptor
可以这样做。如果我错了,请在此更正。使用手柄拦截器
可以:
- 更改
preHandle
方法中的HttpServletResponse
- 基于
处理程序
对象应用筛选器。例如,您可以根据HandlerMethod
- 通过在
preHandle
方法中返回false
来禁止执行处理程序
HandlerInterceptor
可用于大量预处理方面,例如用于授权检查,或常见的处理程序行为,如区域设置、主题更改或添加缓存控制
头。它的主要目的是允许分解出重复的处理程序代码
WebRequestInterceptor
的一个典型用例是准备上下文资源(例如Hibernate会话
),并将它们作为请求属性或线程本地对象公开。此外,您还可以在成功执行处理程序后修改这些上下文资源(例如,刷新Hibernate会话
)。例如,openentitymanagerinviewsinterceptor
将JPAEntityManager
绑定到线程,以完成请求的整个处理
虽然看到了SpringAPI,但我猜WebRequestInterceptor可以
不提交响应,而HandlerInterceptor可以这样做。请
如果我错了,请纠正我
WebRequestInterceptor
接口刻意简化,以尽可能减少通用请求拦截器的依赖性。如果您需要更改响应,您应该使用HandlerIntercepter
或Filter
s.是的,我在这里也看到了这一点:。但我的意思是,这仅仅是为了这些目的吗?在WebRequestInterceptor
中,您可以直接修改模型而不响应这就是我要问的,这就是为什么它的方法签名中没有任何响应参数(HttpServletResponse),如果您需要更改为响应,使用handler拦截器
或过滤器
。