美文网首页
过滤器和拦截器的区别

过滤器和拦截器的区别

作者: 隔壁老王的隔壁啊 | 来源:发表于2018-03-25 00:04 被阅读37次

摘自知乎

过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。
拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。
监听器(Listener):当一个事件发生的时候,你希望获得这个事件发生的详细信息,而并不想干预这个事件本身的进程,这就要用到监听器。

区别:
①过滤器是javaweb中的概念,拦截器是spring中的概念。
②过滤器是基于回调实现的,拦截器是基于反射实现。
③过滤器的核心是doFilter()方法,拦截器的核心是有三个方法:preHandle(),postHandle(),afterCompletion()更加细化。

过滤器可以将其理解成一个chain,当添加多个过滤器时,只有调用了FilterChain类的 doFilter()方法才进行下去。
拦截器有三个方法,我们假设添加两个拦截器如下:

public class MyInterceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("MyInterceptor1 preHandle method execute");

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("MyInterceptor1 postHandle method execute");

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("MyInterceptor1 afterCompletion method execute");
    }
}


public class MyInterceptor2 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("MyInterceptor2 preHandle method execute");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("MyInterceptor2 postHandle method execute");

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("MyInterceptor2 afterCompletion method execute");
    }
}

运行结果:

MyInterceptor1 preHandle method execute
MyInterceptor2 preHandle method execute
MyInterceptor2 postHandle method execute
MyInterceptor1 postHandle method execute
MyInterceptor2 afterCompletion method execute
MyInterceptor1 afterCompletion method execute

相关文章

  • 拦截器和过滤器

    拦截器和过滤器功能很相似 拦截器和过滤器的区别 过滤器 过滤器filter,自己都是实现filter接口,然后do...

  • SpringBoot添加过滤器Filter

    1. 拦截器和过滤器 先说一下,过滤器和拦截器的区别和联系。 1.1 相同点 首先过滤器和拦截器都能实现请求的筛选...

  • 20170907-Spring MVC拦截器

    Filter(过滤器)与Interceptor(拦截器)的区别 区别 ①拦截器interceptor是基于Java...

  • java拦截器和过滤器的区别

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。②拦截器不依赖与servlet...

  • 拦截器和过滤器详解

    过滤器和拦截器的区别: 拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容...

  • 过滤器,拦截器,监听器的区别

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。②拦截器不依赖与servlet...

  • Spring-Interceptor

    过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。 ②拦截器不依赖与servle...

  • Springboot过滤器和拦截器详解及使用场景

    一、过滤器和拦截器的区别 1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前...

  • Springboot过滤器Filter和拦截器Intecepto

    一、过滤器和拦截器的区别 1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前...

  • 过滤器,拦截器,监听器

    链接https://segmentfault.com/a/1190000012072060 区别 过滤器和拦截器非...

网友评论

      本文标题:过滤器和拦截器的区别

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