过滤器(Filter
)是Java EE中的组件,则任何一个Java的WEB项目都可以使用过滤器;而拦截器(Interceptor
)是SpringMVC中的组件,仅当使用了SpringMVC框架才可以使用这个拦截器,并且,仅当被SpringMVC框架处理的请求才有可能被拦截器进行处理,假如将DispatcherServlet
的路径映射为*.do
,则只有以.do
作为后缀的请求才可能被拦截器处理,其它请求是不会被拦截器处理的!
在实际使用时,过滤器的配置相对非常单一,例如:
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<filter-mapping>
<filter-name></filter-name>
<url-pattern></url-pattern>
</filter-mapping>
在整个配置过程中,就只能配置1个映射的URL,尽管可以使用通配符,但是,可能配置的过滤范围不够精准,而拦截器的配置过程中,可以配置若干个拦截路径,也可以配置若干个例外,也可以使用通配符,配置非常灵活!
另外,过滤器是执行在所有Servlet
之前的组件,而拦截器是执行在DispatcherServlet
之后,在所有Controller
之前的组件!
所以,一般情况下,会优先选取拦截器!