我有点困惑Filter
and Interceptor
目的。
据我从文档中了解到,Interceptor
在请求之间运行。另一方面Filter
在渲染视图之前运行,但在控制器渲染响应之后运行。
那么两者的区别在哪里postHandle()
在拦截器和doFilter()
在过滤器中?
What is the best practise in which use cases it should be used?
In this picture where works Filter
s and Interceptor
s?
From HandlerIntercepter
's javadoc http://docs.spring.io/autorepo/docs/spring/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html:
HandlerInterceptor
基本上类似于ServletFilter
, 但在
与后者相比,它只允许使用以下命令进行自定义预处理
禁止执行处理程序本身的选项,以及自定义
后期处理。过滤器更强大,例如它们允许
交换传递下来的请求和响应对象
链。请注意,过滤器被配置为web.xml
, a
HandlerInterceptor
在应用程序上下文中。
作为基本准则,细粒度处理程序相关的预处理任务
是候选人HandlerInterceptor
实施,特别是
分解出通用处理程序代码和授权检查。上
另一方面,一个Filter
非常适合请求内容和视图
内容处理,如多部分表单和 GZIP 压缩。这
通常显示何时需要将过滤器映射到特定内容
类型(例如图像)或所有请求。
话虽这么说:
那么两者的区别在哪里Interceptor#postHandle()
and
Filter#doFilter()
?
postHandle
将在处理程序方法调用之后但在呈现视图之前调用。因此,您可以向视图添加更多模型对象,但您可以not改变HttpServletResponse
因为它已经承诺了。
doFilter
比postHandle
。您可以更改请求或响应并将其传递到链,甚至阻止请求处理。
另外,在preHandle
and postHandle
方法,您可以访问HandlerMethod
处理请求的。因此,您可以根据处理程序本身添加预处理/后处理逻辑。例如,您可以为具有一些注释的处理程序方法添加逻辑。
在哪些用例中应该使用它的最佳实践是什么?
正如文档所说,细粒度处理程序相关的预处理任务是HandlerInterceptor
实现,特别是分解出的公共处理程序代码和授权检查。另一方面,一个Filter
非常适合请求内容和视图内容处理,例如多部分表单和 GZIP 压缩。这通常显示何时需要将过滤器映射到某些内容类型(例如图像)或所有请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)