一尘不染

Spring HandlerInterceptor与Servlet过滤器

spring

现在可以将Spring中的HandlerInterceptor s配置为仅使用来在某些URL上调用<mvc:interceptors>

Servlet过滤器可以实现相同的功能(日志记录,安全性等)。那么应该使用哪一个呢?

我认为使用Interceptor,可以使用ModelAndView对象与模型一起使用,因此它具有更多的优势。谁能提出过滤器或拦截器比其他方法更具优势的方案?


阅读 404

收藏
2020-04-13

共1个答案

一尘不染

org.springframework.web.servlet.HanderInterceptor接口的JavaDoc本身有两个段落讨论这个问题:

HandlerInterceptor基本上类似于Servlet 2.3过滤器,但与后者相反,它仅允许自定义预处理以及禁止执行处理程序本身和自定义后处理的选项。过滤器功能更强大,例如,它们允许交换传递到链中的请求和响应对象。请注意,在应用程序上下文中的HandlerInterceptor web.xml中配置了过滤器。

作为基本准则,与处理程序相关的细粒度预处理任务是HandlerInterceptor实现的候选对象,尤其是分解出的公共处理程序代码和授权检查。另一方面,过滤器非常适合请求内容和视图内容处理,例如多部分表单和GZIP压缩。这通常显示何时需要将过滤器映射到某些内容类型(例如图像)或所有请求。

2020-04-13