拦截器和过滤器的区别

在这里插入图片描述

一. 过滤器:


依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改HttpServletRequest的一些参数,过滤低俗文字、敏感信息等

二. 拦截器:


依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理

三. 过滤器和拦截器的区别:


  1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。

  2. 拦截器依赖web框架,过滤器依赖servlet容器。

  3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

  4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

  5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

  6. 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

  7. 过滤器在servlet前后起作用,而拦截器能深入到方法前后、异常抛出前后等。因此拦截器的操作更有弹性,所以,在spring框架的程序中推荐优先使用拦截器。

posted on 2022-10-24 21:30  JAVA开发区  阅读(20)  评论(0)    收藏  举报  来源