From 3f57d35d71e8a93c915a2518e33f1b119ed0c2a4 Mon Sep 17 00:00:00 2001 From: cuijiawang Date: Thu, 6 Feb 2025 10:17:26 +0800 Subject: [PATCH] filter --- pom.xml | 8 ++++ .../java/stu/base/filter/FilterConfig.java | 25 +++++++++++++ src/main/java/stu/base/filter/MyFilter.java | 37 +++++++++++++++++++ src/main/java/stu/base/filter/filter.md | 20 ++++++++++ 4 files changed, 90 insertions(+) create mode 100644 src/main/java/stu/base/filter/FilterConfig.java create mode 100644 src/main/java/stu/base/filter/MyFilter.java create mode 100644 src/main/java/stu/base/filter/filter.md diff --git a/pom.xml b/pom.xml index 8c60447..e27a6fa 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,14 @@ 1.18.30 + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + org.springframework.boot spring-boot-starter diff --git a/src/main/java/stu/base/filter/FilterConfig.java b/src/main/java/stu/base/filter/FilterConfig.java new file mode 100644 index 0000000..2a9c3b5 --- /dev/null +++ b/src/main/java/stu/base/filter/FilterConfig.java @@ -0,0 +1,25 @@ +package stu.base.filter; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author cuiJiaWang + * @Create 2025-02-06 10:03 + */ +@Configuration +public class FilterConfig { + + @Bean + public FilterRegistrationBean customFilterRegistration() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + MyFilter myFilter = new MyFilter(); + registrationBean.setFilter(myFilter); + registrationBean.addUrlPatterns("/*"); + registrationBean.setOrder(1); // 设置过滤器的执行顺序 + + registrationBean.addInitParameter("encoding", "UTF-8"); // 添加初始化参数 + return registrationBean; + } +} diff --git a/src/main/java/stu/base/filter/MyFilter.java b/src/main/java/stu/base/filter/MyFilter.java new file mode 100644 index 0000000..9b1e8b0 --- /dev/null +++ b/src/main/java/stu/base/filter/MyFilter.java @@ -0,0 +1,37 @@ +package stu.base.filter; + +import javax.servlet.FilterConfig; +import javax.servlet.*; +import java.io.IOException; + +/** + * @Author cuiJiaWang + * @Create 2025-02-06 09:54 + */ +public class MyFilter implements Filter { + + /* + Web 容器在启动时,会触发每个Filter实例的 init 方法调用并传递一个FilterConfig对象, + 该配置允许过滤器获取初始化参数以及ServletContext上下文对象,从而加载任何所需的资源。 + 该方法在Filter的整个生命周期中仅会在初始化时被调用一次。 + */ + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + /* + 每一次请求都会调用该方法 + */ + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + filterChain.doFilter(servletRequest, servletResponse); + } + + /* + Web 容器在销毁时,会执行一次 + 清理过滤器所有持有的资源(如内存、文件句柄、线程等) + */ + @Override + public void destroy() { + } +} diff --git a/src/main/java/stu/base/filter/filter.md b/src/main/java/stu/base/filter/filter.md new file mode 100644 index 0000000..25fb802 --- /dev/null +++ b/src/main/java/stu/base/filter/filter.md @@ -0,0 +1,20 @@ +## 过滤器 +### 什么是Filter +`Filter`是 Java Servlet 规范的一部分,定义在`javax.servlet`包中,`Filter`可以对`Servlet`容器的所有 HTTP 请求(`HttpServletRequest`)和响应(`HttpServletResponse`)进行预处理或后处理操作。 + + +### 使用 +- 在启动类或者任意配置类上加上`@ServletComponentScan`注解来让 Spring Boot 自动扫描并注册这些过滤器。 +```java +@WebFilter(urlPatterns = "/*", filterName = "myFilter") +public class MyFilter implements Filter{} + +@ServletComponentScan(basePackages ="stu.base.filter") // 指定扫描包路径 +public class StuApplication {} +``` +- 使用 `FilterRegistrationBean` 进行注册 +- 直接使用 `@Component` 注解 +```java +@Component //默认会应用到所有请求路径 +public class MyFilter implements Filter{} +```