• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

过滤器与拦截器的区别

互联网 diligentman 2周前 (10-14) 14次浏览

关于过滤器与拦截器的区别

过滤器(Filter)和拦截器(Interceptor)都是可以作用于若干种不同的请求路径的组件,都可以对某种请求进行阻止,不允许继续向后执行,也可以选择放行,按照原本设定的处理流程继续执行!并且,在同一个项目中,允许同时存在若干个过滤器或拦截器,以形成过滤器链或拦截器链,如果某个请求涉及多个过滤器或拦截器,必须每个过滤器或拦截器都放行,才可以继续执行!

过滤器是Java EE中的组件,而拦截器是SpringMVC中的组件!只要是Java EE项目,都可以使用过滤器,但是,只有使用了SpringMVC框架,才可以使用拦截器,并且,仅当被SpringMVC框架处理的请求才可能被拦截器进行处理,例如使用SpringMVC框架时,将DispatcherServlet处理请求的路径设置为*.do,则只有以.do作为后缀的请求才可能被拦截器处理!

过滤器和拦截器的执行时间节点、执行的方法的数量都不相同,过滤器是在所有Servlet组件之前执行的!而拦截器的第1次执行是在DispatcherServlet之后,且在Controller组件之前执行的,而且,当拦截器选择“放行”时,在Controller执行之后,和执行最终的响应之前,还会各执行1次!

过滤器和拦截器的配置也不相同,过滤器是在web.xml中配置的,在配置过程中,可以配置若干个请求路径,也可以使用星号(*)作为通配符,但是,无法配置例外路径(白名单),而拦截器是在Spring的配置文件中进行配置的,其配置方式非常灵活,可以配置若干个请求路径,也可以使用通配符,还可以配置若干个例外路径!

在一般情况下,我们更关注项目的管理,由于过滤器和拦截器都会出现在真正处理请求的组件之前,所以,都可以实现“阻止”和“放行”的效果,那么,哪个简单、易用、功能更强大,就使用哪个!所以,更优先推荐使用拦截器解决项目中的问题!但是,这也并不代表拦截器就可以完全取代过滤器,例如,某些处理过程应该出现在更早的执行时间节点,就必须使用过滤器,而不能使用拦截器!


喜欢 (0)