过滤器(Filter)与拦截器(Interceptor)

过滤器(Filter)与拦截器(Interceptor)

两者的区别和联系

过滤器(Filter)

  • 依赖于servlet容器;
  • 在实现上基于函数回调,可以对几乎所有请求进行过滤;
  • 缺点:一个过滤器实例只能在容器初始化时调用一次;
  • 使用目的:主要做一些过滤操作,获取我们想要的数据,例如:
    • 过滤器中修改字符编码;
    • 过滤器中修改HttpServletRequest的一些参数,过滤低俗文字、危险字符等;

拦截器(Interceptor)

  • 依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架;
  • 实现上基于Java的反射机制,属于面向切面编程的一种运用;
  • 因为基于web框架,所以可以使用spring的依赖注入进行一些业务操作;
  • 一个拦截器实例可以在一个controller的生命周期之内多次调用;
  • 缺点:只能对controller请求进行拦截,其他的例如直接访问静态资源的请求则没法进行拦截;

两者对比

1.使用范围
  • Filter是Servlet中定义的,所以只能用于Web程序中;
  • Interceptor是Spring定义的,既可以用于web程序中,也可以用于其他程序中(Application、Swing);
2.依赖
  • Filter是Servlet中定义的,需要依赖Servlet容器的支持;
  • Interceptor是Spring中定义的,只需要Spring框架的支持即可;
3.使用的资源不同
  • Filter只能配置在web.xml中,无法获得更多的Spring的支持;
  • Interceptor是Spring中的一个组件,配置在Spring的上下文中,能与Spring里的任何资源、对象(Service层、数据源、事务管理等)通过IOC注入到拦截器中,能与Spring其他组件完美结合;
4.使用的深度不同
  • Filter只能在Servlet前后起作用,即chain.doFilter(request,response)方法调用的前后;
  • Interceptor能深入方法的前后(preHandle、postHandle)、异常抛出前后等,因此拦截器具有更大的弹性;
5.初始化
  • Filter在容器启动时执行init方法;
  • Interceptor没有初始化方法,只有在Controller方法调用前的preHandle方法;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值