Spring Boot 使用过滤器filter

news/2025/3/4 6:20:04/

执行流程

在Spring Boot项目中,过滤器(Filter)的执行流程遵循Servlet规范。具体来说,过滤器是在请求到达目标资源之前和响应返回给客户端之前执行的一系列操作。下面是详细的过滤器执行流程:

  1. 初始化阶段:

    • 当Web应用启动时,容器会读取配置文件中的过滤器信息。
    • 容器会实例化每个过滤器,并调用其init(FilterConfig filterConfig)方法进行初始化。
  2. 请求处理阶段:

    • 当一个请求到达服务器时,容器会检查是否有任何过滤器与该请求匹配。
    • 如果有多个过滤器匹配,则按照它们在配置文件中声明的顺序依次执行。
    • 每个过滤器的doFilter(ServletRequest request, ServletResponse response, FilterChain chain)方法会被调用。
      • doFilter方法中,你可以在请求到达目标资源之前执行一些操作。
      • 调用chain.doFilter(request, response)将请求传递给下一个过滤器或目标资源。
      • 请求经过所有过滤器后,最终到达目标资源(如Controller)进行处理。
  3. 响应处理阶段:

    • 目标资源处理完请求后,生成响应。
    • 响应会沿着过滤器链逆序返回,即最后一个过滤器先处理响应,然后是倒数第二个过滤器,依此类推。
    • 在每个过滤器的doFilter方法中,你可以在响应返回给客户端之前执行一些操作。
  4. 销毁阶段:

    • 当Web应用停止时,容器会调用每个过滤器的destroy()方法进行清理工作。

 具体使用

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter(urlPatterns = "/*")
public class MyGlobalFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化操作System.out.println("MyGlobalFilter initialized");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求到达控制器之前执行的操作System.out.println("Before processing the request");// 继续处理请求chain.doFilter(request, response);// 在响应返回给客户端之前执行的操作System.out.println("After processing the request");}@Overridepublic void destroy() {// 销毁操作System.out.println("MyGlobalFilter destroyed");}
}


http://www.ppmy.cn/news/1576474.html

相关文章

SQL Server2019安装步骤+使用+解决部分报错+卸载(超详细 附下载链接)

1、下载安装SQL Server2019 第一步:官网下载安装包SQL Server 2019 - 定价 | Microsoft 【以下内容图片借用SQL Server2019安装步骤(超详细 附下载链接) - 掘金中内容】 第二步:打开安装包,并选择基本. 第三步&#…

三次握手内部实现原理

socket()创建一个新的套接字 int socket(int domain, int type, int protocol); 参数: domain:地址族,如 AF_INET(IPv4),AF_INET6(IPv6) type:套接字类型&…

【CSS—前端快速入门】CSS 常用样式

CSS 常用 CSS 样式 1. 前端样式查询网站: MDN Web Docs (mozilla.org) w3school 2. border 2.1 借助 MDN 了解 border 我们借助 MDN 网站来学习 border 样式的使用: 2.2 border 常见属性 保存代码,打开页面: 对于标签不同样式的…

内网渗透测试-Vulnerable Docker靶场

靶场来源: Vulnerable Docker: 1 ~ VulnHub 描述:Down By The Docker 有没有想过在容器中玩 docker 错误配置、权限提升等? 下载此 VM,拿出您的渗透测试帽并开始使用 我们有 2 种模式: - HARD:这需要您将 d…

数据库基础四

创建数据表(创建mysql数据表需要以下信息:表名、表字段名、定义每个表字段) 一个关系型数据库,一般以表的形式显示 创建数据表(创建mysql数据表需要以下信息:表名、表字段名、定义每个表字段) CREATE TABLE 表名 (属性名 数据类型 完整性约束条件, 属性名 数据类型 完…

MySQL—授权与权限回收

1、查看某个用户的权限 --查看某个用户的权限 show grants; --查看root用户的权限 show grants for stc1; --查看stc1用户的权限 2、授权stc用户远程登录test库,并授予所有的执行权限 grant all privileges on stc.* to stc% identified by ppp; 3、授予stc1用户…

AI学习资料留档(持续更新)

一、模型部署/硬件资源 1、动态量化版部署方法、大小 完整的671B MoE DeepSeek R1怎么塞进本地化部署?详尽教程大放送! | 机器之心 2、 二、模型应用 1、deepseek R1cursor使用 不卡顿、免费的满血版DeepSeek-R1 API,在无问芯穹这里用上…

前端依赖nrm镜像管理工具

npm 默认镜像 :https://registry.npmjs.org/ 1、安装 nrm npm install nrm --global2、查看镜像源列表 nrm ls3、测试当前环境下,哪个镜像源速度最快。 nrm test4、 切换镜像源 npm config get registry # 查看当前镜像源 nrm use taobao # 等价于 npm…