美文网首页springboot面试Spring
过滤器(Filter)与拦截器(Interceptor)

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

作者: Muscleape | 来源:发表于2018-07-04 14:44 被阅读658次

    过滤器(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方法;

    相关文章

      网友评论

        本文标题:过滤器(Filter)与拦截器(Interceptor)

        本文链接:https://www.haomeiwen.com/subject/ivmeuftx.html