对于过滤器与拦截器的区别
过滤器(Filter)和拦截器(Interceptor)都是能够作用于若干种不同的申请门路的组件,都能够对某种申请进行阻止,不容许持续向后执行,也能够抉择放行,依照本来设定的解决流程继续执行!并且,在同一个我的项目中,容许同时存在若干个过滤器或拦截器,以造成过滤器链或拦截器链,如果某个申请波及多个过滤器或拦截器,必须每个过滤器或拦截器都放行,才能够继续执行!
过滤器是Java EE中的组件,而拦截器是SpringMVC中的组件!只有是Java EE我的项目,都能够应用过滤器,然而,只有应用了SpringMVC框架,才能够应用拦截器,并且,仅当被SpringMVC框架解决的申请才可能被拦截器进行解决,例如应用SpringMVC框架时,将DispatcherServlet解决申请的门路设置为*.do,则只有以.do作为后缀的申请才可能被拦截器解决!
过滤器和拦截器的执行工夫节点、执行的办法的数量都不雷同,过滤器是在所有Servlet组件之前执行的!而拦截器的第1次执行是在DispatcherServlet之后,且在Controller组件之前执行的,而且,当拦截器抉择“放行”时,在Controller执行之后,和执行最终的响应之前,还会各执行1次!
过滤器和拦截器的配置也不雷同,过滤器是在web.xml中配置的,在配置过程中,能够配置若干个申请门路,也能够应用星号(*)作为通配符,然而,无奈配置例外门路(白名单),而拦截器是在Spring的配置文件中进行配置的,其配置形式非常灵活,能够配置若干个申请门路,也能够应用通配符,还能够配置若干个例外门路!
在个别状况下,咱们更关注我的项目的治理,因为过滤器和拦截器都会呈现在真正解决申请的组件之前,所以,都能够实现“阻止”和“放行”的成果,那么,哪个简略、易用、性能更弱小,就应用哪个!所以,更优先举荐应用拦截器解决我的项目中的问题!然而,这也并不代表拦截器就能够齐全取代过滤器,例如,某些处理过程应该呈现在更早的执行工夫节点,就必须应用过滤器,而不能应用拦截器!