This commit is contained in:
cuijiawang
2025-02-06 10:17:26 +08:00
parent 5d4cf75e13
commit 3f57d35d71
4 changed files with 90 additions and 0 deletions

View File

@@ -20,6 +20,14 @@
<lombok.version>1.18.30</lombok.version>
</properties>
<dependencies>
<!-- filter -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- filter end -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>

View File

@@ -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<MyFilter> customFilterRegistration() {
FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
MyFilter myFilter = new MyFilter();
registrationBean.setFilter(myFilter);
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(1); // 设置过滤器的执行顺序
registrationBean.addInitParameter("encoding", "UTF-8"); // 添加初始化参数
return registrationBean;
}
}

View File

@@ -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() {
}
}

View File

@@ -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{}
```