过滤器和拦截器讲一下

过滤器(Filter)

  1. 实现原理:过滤器是基于Java EE标准的,它依赖于Servlet规范,利用函数回调的方式工作。开发需要实现javax.servlet.Filter接口,并在web.xml中配置过滤器的映射规则。

  2. 触发时机:过滤器在HTTP请求到达Servlet之前和响应离开Servlet之后执行,可以对进出Web容器的所有请求和响应进行预处理和后处理。这包括但不限于设置字符编码、安全验证、日志记录等。

  3. 功能:过滤器主要用于数据的转换、过滤等,如统一设置字符集、处理跨站脚本攻击(XSS)、权限预检查等。

  4. 生命周期:由Servlet容器管理,随Web应用的启动而创建,关闭时销毁。

  5. 适用范围:广泛应用于对几乎所有进出Web容器的请求和响应进行处理。

拦截器(Interceptor)

  1. 实现原理:拦截器是基于Java的反射机制,特别是Spring框架中的拦截器通常实现org.springframework.web.servlet.HandlerInterceptor接口或继承相关基类。它通过AOP(面向切面编程)思想,使用动态代理来实现。

  2. 触发时机:拦截器在Spring MVC的DispatcherServlet处理请求过程中,在调用具体Controller方法之前和之后执行,更贴近业务逻辑层。

  3. 功能:拦截器主要用于业务逻辑处理之前的预处理和之后的清理工作,比如权限验证、事务管理、日志记录等。它可以访问Spring的IoC容器,利用容器中的服务。

  4. 生命周期:由Spring IoC容器管理,可以利用Spring的依赖注入功能,访问其他Bean。

  5. 适用范围:主要针对Spring MVC的Controller方法进行细粒度的控制,不涉及直接访问静态资源的请求。

总结

  • 覆盖范围:过滤器的范围更广,可以处理所有进出Web容器的请求;拦截器则主要关注Spring MVC的请求处理过程。
  • 技术实现:过滤器基于函数回调,拦截器基于反射和动态代理。
  • 依赖性:过滤器不依赖于Spring框架,拦截器通常与Spring框架紧密相关。
  • 功能侧重:过滤器偏向于全局性的数据处理和安全控制,拦截器更偏向于业务逻辑相关的处理。
posted @ 2024-04-28 14:17  初仰  阅读(14)  评论(0)    收藏  举报