拦截器(Intercepter)和过滤器(Filter)的区别 作者:马育民 • 2021-02-22 08:26 • 阅读:10042 # 用过滤器还是用拦截器 优先使用拦截器 # 区别 1. 拦截器是基于java的 **反射机制** 的,是AOP的一种运用,而过滤器是基于函数回调。 2. 拦截器依赖 springmvc,过滤器是JavaEE规范,依赖 servlet容器。 3. 拦截器只能对 Controller 请求起作用,而过滤器则可以对几乎所有的请求起作用。 - springmvc:默认不拦截 html、jsp 请求,是否拦截与配置有关 - springboot:默认可拦截 Controller、html请求 4. 拦截器可以访问 Controller 上下文、值栈里的对象,而过滤器不能访问。 5. 在 Controller 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 6. 拦截器可以获取 **IOC容器** 中的各个bean,而过滤器不行,在拦截器里注入一个service,可以调用业务逻辑。 7. 过滤器和拦截器 **触发时机** 不一样: - 过滤器在 **servlet** 之前进行处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。 - 拦截器相对更细粒度,可细化到 **方法前后**、**抛出异常前后**,所以 **优先使用拦截器** - 过滤器包裹住servlet,servlet包裹住拦截器。 [![](https://www.malaoshi.top/upload/pic/springmvc/330611-20171023144517066-24770749.png)](https://www.malaoshi.top/upload/pic/springmvc/330611-20171023144517066-24770749.png) 原文出处:http://malaoshi.top/show_1IXdaw3tzN0.html