拦截器与过滤器的区别
相似点
拦截器和过滤器在各自的领域中,都可以在处理请求之前执行,并且,都可以选择“阻止”或“放行”!
不同点
-
过滤器是Java EE中的组件,所以,只要是Java WEB项目都可以使用过滤器;拦截器是SpringMVC框架中的组件,所以,只有使用了SpringMVC框架的项目才可以使用拦截器,并且,只有被SpringMVC框架处理的请求路径才可能被拦截;
-
过滤器的配置中,可以配置“过滤名单”(黑名单),并且可以使用通配符,但是,不可以配置“白名单”;而拦截器可以使用通配符,既可以配置“黑名单”,也可以配置“白名单”,在配置时更加自由、简单;
-
过滤器是执行在Servlet组件之前的;而SpringMVC框架的执行入口就是一个Servlet组件,拦截器的第1次执行是在这个Servlet组件之后,在SpringMVC控制器(Controller)之前的!
选取
-
目前,SpringMVC框架是主流框架,所以,可以支持使用拦截器;
-
SpringMVC的拦截器在配置方面更加灵活;
-
绝大部分的拦截器都是为了在控制器之前执行某些代码,或进行相关的检查,在一点上,过滤器的拦截器实现的效果是相同的,需要关注执行时间节点的应用场景较少。