springboot(13)拦截器和过滤器的区别

1. 解释拦截器和过滤器的概念

拦截器是一种拦截请求并在请求到达目标之前执行某些任务的机制。

过滤器是一种修改或拦截请求或响应的机制。通常,它们用于在特定的请求或响应被处理之前对其进行处理或修改。

2. 触发时机

过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
如下图
请添加图片描述

3. 拦截器和过滤器的相似点:

  • 都是一种机制,用于拦截请求或响应
  • 都可以修改请求或响应的内容
  • 都可以用于请求或响应的预处理

4. 拦截器和过滤器的不同点如下:

  • 实现方式:拦截器是基于 Java 的反射机制实现的,而过滤器则是基于 Servlet API 实现的。
  • 执行顺序:拦截器的执行顺序是在过滤器之后,即在请求到达目标之前进行拦截处理。过滤器的执行顺序是在拦截器之前,即在请求进入 Servlet 之前进行处理。
  • 作用范围:拦截器可以拦截 Spring MVC 中的请求,也可以拦截 Struts2 等框架中的请求。而过滤器只能拦截 Servlet 的请求。
  • 可操作的内容:拦截器可以访问 ActionContext 中的数据,并可以进行拦截器链的控制,从而可以对请求进行更加细粒度的控制。过滤器只能对 Servlet 的请求和响应进行处理,并不能修改 ActionContext 中的数据。

5. 应该在以下情况下使用拦截器和过滤器:

  • 拦截器:用于在请求到达目标之前执行某些任务,例如身份验证、日志记录等。拦截器还可以用于控制请求的访问权限,例如检查用户是否具有特定的角色或权限。
  • 过滤器:用于修改或拦截请求或响应的内容。过滤器通常用于在请求或响应被处理之前对其进行处理或修改。例如,可以使用过滤器来对请求参数进行编码或解码,或对响应进行压缩以提高性能。过滤器还可以用于检查请求头,并根据需要拒绝请求。

需要注意的是,拦截器和过滤器并非完全互换。拦截器更适合用于控制请求的访问权限和执行某些特定任务,而过滤器更适合用于修改请求或响应的内容。

6. 拦截器和过滤器的底层原理是不同的

拦截器是基于 Java 的反射机制实现的,它使用 Java 的动态代理机制拦截目标对象的方法调用,并在方法调用前后执行某些任务。

过滤器是基于 Servlet API 实现的,它使用 Java 的 servlet 技术来拦截请求和响应,可以对请求和响应进行修改或拦截。

拦截器和过滤器的实现方式不同,但它们的目的都是拦截请求和响应,并对其进行处理。拦截器和过滤器的执行顺序和作用范围也不同,这取决于它们的实现方式和用途。

猜你喜欢

转载自blog.csdn.net/Bilal_0/article/details/129968727