过滤器和拦截器

简介: 过滤器和拦截器
什么是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 实例。

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


相关文章
|
24天前
SpringMVC拦截器的介绍,拦截器的基本实现,拦截器链配置
SpringMVC拦截器的介绍,拦截器的基本实现,拦截器链配置
31 2
|
1月前
过滤器&拦截器
过滤器&拦截器
35 0
过滤器&拦截器
|
1月前
|
前端开发 Java 程序员
Servlet/过滤器/拦截器/监听器:
Servlet接口在Sun公司有两个默认的实现类:HttpServlet、GenericServlet。Servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
|
1月前
SpringMVC-拦截器参数及拦截器链配置
SpringMVC-拦截器参数及拦截器链配置
38 0
|
8月前
|
Java 容器
过滤器和拦截器的区别
Filter 也称为过滤器,基于Servlet实现,拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行,基于AOP思想,对方法进行增强。和servlet 中的过滤器类似,都是对用户请求进行处理。
54 0
|
存储 中间件 API
拦截器介绍和实际使用
拦截器介绍和实际使用
182 0
|
XML 设计模式 前端开发
Servlet、过滤器、监听器、拦截器
Servlet是javaEE规范中的一种,javaEE中的规范很多除了Servlet还有很多我们熟悉的JSP、JDBC、RMI、XML、EJB、JTS等等。
131 0
Servlet、过滤器、监听器、拦截器
|
架构师 Java Spring
聊聊面试中的过滤器与拦截器
聊聊面试中的过滤器与拦截器
183 1
聊聊面试中的过滤器与拦截器
|
JSON 运维 数据格式
[SpringMVC]拦截器②(拦截器参数、拦截器链配置)
拦截器②(拦截器参数、拦截器链配置)
[SpringMVC]拦截器②(拦截器参数、拦截器链配置)