SpringBoot中使用过滤器filter

过滤器Filter

在 Java 中,Filter(过滤器)是一种用于对请求进行预处理和后处理的机制。

工作原理:

当一个请求到达服务器时,会先经过一系列配置好的过滤器。过滤器可以检查请求的参数、头信息、请求体等内容,并根据特定的规则进行处理。处理完请求后,再将请求传递给目标资源。在响应返回时,过滤器也可以对响应进行相应的处理,如修改响应头、压缩响应内容等。

快速上手

废话不多说直接来看快速上手,老规矩背景是在测试类中进行。

这个添加依赖

步骤

第1步,定义过滤器 :1.定义一个类,实现 Filter 接口,并重写其所有方法

第2步,配置过滤器:Filter类上加 @WebFilter 注解,配置拦截资源的路径。

第3部,在启动类上点加@servletComponentScan注解。

代码

java 复制代码
//定义一个类,实现一个标准的Filter过滤器的接口
@WebFilter(urlPatterns="/*")
public class DemoFilter implements Filter {
@Override //初始化方法, 只调用一次
public void init(FilterConfig filterConfig) throws
ServletException {
System.out.println("init 初始化方法执行了");
}
@Override //拦截到请求之后调用, 调用多次
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain) throws IOException, ServletException {
System.out.println("Demo 拦截到了请求...放行前逻辑");
//放行
chain.doFilter(request,response);
}
@Override //销毁方法, 只调用一次
public void destroy() {
System.out.println("destroy 销毁方法执行了");
}
}

init方法:过滤器的初始化方法。在web服务器启动的时候会自动的创建Filter过滤器对

象,在创建过滤器对象的时候会自动调用init初始化方法,这个方法只会被调用一次。

doFilter方法:这个方法是在每一次拦截到请求之后都会被调用,所以这个方法是会被调

用多次的,每拦截到一次请求就会调用一次doFilter()方法。

destroy方法: 是销毁的方法。当我们关闭服务器的时候,它会自动的调用销毁方法

destroy,而这个销毁方法也只会被调用一次。

到这一步了其实过滤器还是没有生效,因为没有执行第三步,从本质上讲,过滤器是 Servlet 规范的组成部分,而不是 Spring 框架原生自带的特定组件。

java 复制代码
@ServletComponentScan
@SpringBootApplication
public class TliasWebManagementApplication {
public static void main(String[] args) {
SpringApplication.run(TliasWebManagementApplication.class,
args);
}
}

过滤器的执行流程

过滤器的拦截路径配置

|--------|--------------|-----------------------|
| 拦截路径 | urlPatterns值 | 含义 |
| 拦截具体路径 | /login | 只有访问 /login 路径时,才会被拦截 |
| 目录拦截 | /emps/* | 访问/emps下的所有资源,都会被拦截 |
| 拦截所有 | /* | 访问所有资源,都会被拦截 |

过滤器链

在我们web服务器当中,定义了两个过滤器,这两个过滤器就形成了一个过滤器链。

而这个链上的过滤器在执行的时候会一个一个的执行,会先执行第一个Filter,放行之后再来执行第二

个Filter,如果执行到了最后一个过滤器放行之后,才会访问对应的web资源。

访问完web资源之后,按照我们刚才所介绍的过滤器的执行流程,还会回到过滤器当中来执行过滤器放

行后的逻辑,而在执行放行后的逻辑的时候,顺序是反着的。

相关推荐
考虑考虑7 小时前
JDK26中的Map.ofLazy
java·后端·java ee
云浪8 小时前
Go 并发实战:从零实现一个高并发安全的任务调度器
javascript·后端·go
苏三的开发日记8 小时前
Docker 启动顺序优化(CentOS / Ubuntu)
后端
高频因子挖掘机10 小时前
同一交易日出现重复 K 线:去重前先确认时间、来源和粒度
后端·github·api
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天10 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源