<mvc:interceptors>
在某些URL上调用。Servlet过滤器可以实现相同的功能(日志记录,安全性等)。那么应该使用哪一个呢?
我认为使用Interceptor,可以使用ModelAndView
对象与模型一起使用,因此它具有更多的优势。任何人都可以提出过滤器或拦截器比其他方法更具优势的方案吗?
org.springframework.web.servlet.HanderInterceptor
接口JavaDoc本身有两个段落讨论了这个问题:HandlerInterceptor基本上类似于Servlet 2.3过滤器,但是与后者相反,它仅允许使用禁止执行处理程序本身的选项,以及自定义后处理。过滤器功能更强大,例如它们允许交换处理的请求和响应对象下链。请注意,在web.xml中配置了过滤器,应用程序上下文中的HandlerInterceptor。作为基本指南,与处理程序相关的细粒度预处理任务是HandlerInterceptor实现的候选对象,尤其是分解出通用处理程序代码和授权检查。在另一方面,筛选器非常适合请求内容和视图内容处理,例如多部分表单和GZIP压缩。这个通常显示何时需要将过滤器映射到某些内容类型(例如图像)或所有请求。
过滤器更适合将您的请求/响应视为黑匣子系统。无论servlet如何实现,它们都将起作用。
[如果您使用的是Spring MVC,则没有理由将新逻辑编写为servlet过滤器。过滤器可以做的所有事情,拦截器可以做得更轻松,更优雅。
还要记住,servlet过滤器比拦截器存在的时间长得多。
Servlet Filter:
此行为允许实现在许多不同上下文中重用的通用功能。
如上图所示,过滤器在Web容器中运行,因此其定义也将包含在web.xml文件中。
过滤器包括三种主要方法:
Interceptor:
Spring拦截器在SpringMVC上下文中执行,因此它们已在rest-servlet.xml文件中定义:
拦截器包括三种主要方法: