过滤器和拦截器的区别

过滤器和拦截器的区别

1.过滤器(Filter)

可以直接实现Filter接口,接口中定义了三个方法。
  • init():该方法在容器初始化过滤器时被调用,整个生命周期只调用一次,切必须执行成功,否则过滤器无效。
  • doFilter():容器中的每一次请求都会调用,FilterChain用来调下一个过滤器。
  • destroy():当容器销毁过滤器实例,调用该方法,一般用来关闭资源。整个生命周期只调用一次。

2.拦截器(Interceptor)

 与过滤器不同,拦截器可以同时存在多个,进行链式调用,一个请求可以触发多个拦截器,按顺序执行。通过实现HandlerInterceptor接口来实现,同样定义了三个方法。
  • preHandle():请求处理前调用,返回值为false,结束当前请求,之后的拦截器也不再执行。
  • postHandle(): 在preHandle()方法返回值为true时调用,在进入Controller之后,DispatchServlet渲染视图之前调用,调用顺序和栈的数据结构相似,先声明的后调用,最后声明的反而第一个调用。
  • afterCompletion():只有在preHandle()方法返回值为true才执行,在整个请求结束后,DispatcherServlet渲染视图之后。

3.不同之处

二者皆体现了AOP编程思想,通常用于日志记录,登录验证,权限过滤等功能。
  • 1.实现方式

    过滤器基于函数回调,拦截器基于反射机制,动态代理实现的。
  • 2.适用范围

    过滤器依赖Tomcat等容器,因为这个接口是在Servlet规范中定义,只能在Web程序中使用。
    拦截器是Spring的一个组件,并由Spring容器管理,不依赖Tomcat等容器,应用范围广,在Web,Application,等中可使用。
  • 3.触发时间

    过滤器是进入容器后,进servlet之前进行预处理,servlet之后请求结束。
    拦截器是进入servlet之后,controller之前进行预处理,controller渲染视图后请求结束。
  • 4.拦截范围

    过滤器对几乎所有进入容器的请求起作用,拦截器只对controller或static目录下资源请求起作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值