过滤器和拦截器

简介: 过滤器和拦截器
什么是Servlet?

它是一个 Java 类,用于扩展托管通过请求-响应编程模型访问的应用程序的服务器的功能。

Java Servlet 技术定义了特定于 HTTP 的 servlet 类。 javax.servlet 和 javax.servlet.http 包提供了用

于编写 servlet 的接口和类。 “javax.servlet”包中的 Servlet 声明了 servlet 生命周期的三个基本方法——init()、service() 和 destroy()。

什么是Servlet容器?

Servlet 在处理网络端(例如解析 HTTP 请求、连接处理等)的 servlet 容器中运行。 Tomcat 是最受欢迎的。

Filter

它是一个 Java 类,由 servlet 容器针对每个传入的 HTTP 请求和每个 HTTP 响应执行。

在到达 Servlet 之前,请求总是首先通过 Filter 实例。

如果您的应用程序中有多个自定义过滤器,则可以使用“@Order”注释定义顺序。

  • init(FilterConfig config) — 仅调用一次。它用于初始化过滤器。
  • doFilter(HttpServletRequest request,HttpServletResponse response, FilterChain chain) — 每次用户向过滤器映射到的任何资源发送请求时都会调用此方法。它用于执行过滤任务。
  • destroy() - 当过滤器从服务中取出时,它只被调用一次。

网络异常,图片无法展示
|

Interceptor

Spring 拦截器类似于 Servlet 过滤器。拦截器只允许自定义预处理,可以选择禁止处理程序本身的执行,以及自定义后处理,可以访问 Spring 上下文。 preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) — 这用于在将请求发送到控制器之前执行操作。此方法应返回 true 以将响应返回给客户端。

  • postHandle(HttpServletRequest 请求,HttpServletResponse 响应,对象处理程序,ModelAndView modelAndView) — 这用于在向客户端发送响应之前执行操作。
  • afterCompletion(HttpServletRequest 请求,HttpServletResponse 响应,
  • Object handler, Exception exception) — 这用于在完成请求和响应后执行操作。
HandlerInterceptor :

HandlerInterceptor 实例作为 DispatcherServlet(实现 javax.servlet.Servlet)内部请求处理的一部分执行。

HandlerInterceptorAdapter:

如果你想提供一个自定义实现并且只关心他们的几个方法(如果你不想创建需要覆盖的空方法),最好实现一个适配器。

网络异常,图片无法展示
|

Filters vs HandlerInterceptors
  • Filter 与 Servlet API 有关,而 HandlerIntercepter 是 Spring 特定的概念。
  • 拦截器只会在过滤器之后执行。
  • 细粒度的预处理任务适用于HandlerInterceptor(授权检查等)
  • 内容处理相关或通用流程非常适合过滤器(例如多部分表单、zip 压缩、图像处理、日志记录请求、身份验证等)
  • Interceptor 的 postHandle 方法将允许您向视图添加更多模型对象,但您不能更改 HttpServletResponse,因为它已经提交。
  • Filter 的 doFilter 方法比 Interceptor 的 postHandle 更加通用。 您可以更改请求或响应并将其传递给链,甚至阻止请求处理。
  • HandlerInterceptor 提供了比过滤器更细粒度的控制,因为您可以访问实际的目标“处理程序”。 您甚至可以检查处理程序方法是否具有特定注释。
Spring Cloud Gateway 自定义过滤器
GlobalFilter

全局过滤器影响每个请求。

GatewayFilter

网关过滤器仅适用于某些路由。

Order: 如果我们想配置过滤器在过滤器链中的位置,我们可以检索一个 OrderedGatewayFilter 实例。

网络异常,图片无法展示
|


相关文章
|
2天前
|
存储 缓存 安全
常用过滤器介绍
常用过滤器介绍
|
1月前
|
前端开发 Java 中间件
过滤器(Filter)和拦截器(Interceptor)有什么不同?
文章比较了过滤器(Filter)和拦截器(Interceptor)的不同,包括它们的实现方式、应用场景、执行顺序、依赖框架和访问范围,指出过滤器通常用于全局和非业务相关的操作,而拦截器用于Spring MVC中与业务逻辑相关的处理。
45 8
|
28天前
|
Java 数据挖掘 Android开发
如何添加一个过滤器
如何添加一个过滤器
|
6月前
SpringMVC拦截器的介绍,拦截器的基本实现,拦截器链配置
SpringMVC拦截器的介绍,拦截器的基本实现,拦截器链配置
53 2
|
6月前
|
Python
过滤器
过滤器
27 2
|
6月前
过滤器&拦截器
过滤器&拦截器
55 0
过滤器&拦截器
|
Java 容器
过滤器和拦截器的区别
Filter 也称为过滤器,基于Servlet实现,拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行,基于AOP思想,对方法进行增强。和servlet 中的过滤器类似,都是对用户请求进行处理。
79 0
|
监控 Java 数据库连接
过滤器的应用
在上一篇博客中,我们简单的学习了一下面向切面编程,而过滤器就是对这一思想的应用。那如何在项目中使用呢?
|
存储 中间件 API
拦截器介绍和实际使用
拦截器介绍和实际使用
226 0