SpringBoot Filter过滤器的使用篇

devtools/2024/11/14 14:58:47/

Filter生命周期

  • 程序启动调用Filter的init()方法(永远只调用一次);
  • 程序停止调用Filter的destroy()方法(永远只调用一次);
  • doFilter()方法每次的访问请求如果符合拦截条件都会调用(程序第一次运行,会在servlet调用init()方法以后调用;
  • 不管第几次,都在调用doGet(),doPost()方法之前)。

Filter的使用

无论哪种方式都需要先定义一个Filter

java">public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("初始化myFilter过滤器");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("进入MyFilter过滤器 ");filterChain.doFilter(servletRequest, servletResponse);System.out.println("MyFilter处理一下服务端返回的response");}@Overridepublic void destroy() {Filter.super.destroy();System.out.println("销毁MyFilter过滤器");}
}

一、注解配置

java">package org.example.springbootfilter.filter;import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import org.springframework.core.annotation.Order;import java.io.IOException;@Order(1)
@WebFilter(filterName = "myFilter1", urlPatterns = {"/filter/*"})
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("初始化myFilter过滤器");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("进入MyFilter过滤器 ");filterChain.doFilter(servletRequest, servletResponse);System.out.println("MyFilter处理一下服务端返回的response");}@Overridepublic void destroy() {Filter.super.destroy();System.out.println("销毁MyFilter过滤器");}
}

代码说明:

1.@WebFilter注解,filterName属性表示filter的名称,urlPatter表示要拦截的URL资源,可以是一个或者多个。

2.**@Order(1)**表示如果有多个拦截器的话就是设置这个拦截器的运行等级,数字越小,越先执行

3.**init()**方法只会执行一次,初始化过滤器。

4.**doFilter()**核心方法,配置过滤器的逻辑代码。

5.**destroy()**只会在项目停止或者是项目重新部署的时候才会执行。

开启扫描配置:

java">package org.example.springbootfilter;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;@ServletComponentScan
@SpringBootApplication
public class SpringBootFilterApplication {public static void main(String[] args) {SpringApplication.run(SpringBootFilterApplication.class, args);}
}

配置完上面的之后我们还需要在启动类加上一个扫描包的注解,开启包扫描。@ServletComponentScan(“com.example.springbootfilter.filter”),当然你也可以不用写包的具体地址,不传参数,但是建议是传参数,并且这个采参数也可以传多个的。

以上就完成了一个Filter的基本配置,运行项目即可看到效果,还有一种非注解形式的配置方式。

二、Java配置

使用 @Configuration + @Bean配置。

java">@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean registFilter(){FilterRegistrationBean registrationBean = new FilterRegistrationBean();registrationBean.setFilter(new MyFilter());registrationBean.addUrlPatterns("/*");registrationBean.setName("Filter1");registrationBean.setOrder(1);return registrationBean;}
}

Github:

完整的代码github: https://github.com/chenguowei/project_java/blob/main/spring-boot-examples-demo/spring-boot-filter/README.md


http://www.ppmy.cn/devtools/17449.html

相关文章

Coursera: An Introduction to American Law 学习笔记 Week 02: Contract Law

An Introduction to American Law 本文是 https://www.coursera.org/programs/career-training-for-nevadans-k7yhc/learn/american-law 这门课的学习笔记。 文章目录 An Introduction to American LawInstructors Week 02: Contract LawKey Contract Law TermsSupplemental Re…

Let‘s Move Sui:解锁区块链高性能潜力,探索创新开发体验

Sui 是基于第一原理重新设计和构建而成的 L1 公链,旨在为创作者和开发者提供能够承载 Web3 中下一个十亿用户的开发平台。 今年,Sui 的原生编程语言 Move 迎来了重要的更新升级。2024 版将增加枚举 Enums、宏函数、Method 语法等功能。这些重要的新功能为…

安卓手机连接电脑实用技巧:实现文件传输与共享

在手机使用过程中,我们常常需要将手机中的文件传输到电脑,或者将手机与电脑进行共享。为了实现这一需求,掌握一些实用的安卓手机连接电脑技巧就显得尤为重要。本文将为您详细介绍2种简单、高效且安全的方法,让您轻松实现安卓手机与…

BFS解决FloodFill算法:(Leetcode:200. 岛屿数量)

题目链接:200. 岛屿数量 - 力扣(LeetCode) 本题由于没有给出开始搜索的位置,所以每一个位置都要进行一次广度优先搜索 另外为了不修改原数组数据,需要设置一个bool类型的二维数组vis来判断某个位置是否被搜索过 cl…

鸿蒙应用ArkTS开发- 选择图片、文件和拍照功能实现

前言 在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙原生应用中,我们怎么开发这样的功能呢? 本文会给大家对这个功能点进行讲解,我们采用的是拉起系统组件来进行图片…

03-JAVA设计模式-状态模式

状态模式 什么是状态模式 Java中的状态模式(State Pattern)是一种行为型设计模式,主要用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。状态模式允许一个对象在其内部状态改变时改变它的行为,使得对象看起来似乎…

笔记:Python 循环结构练习题

文章目录 前言一、Python 循环结构是什么?二、选择题2.填空题 总结 前言 欢迎来到Python循环结构的练习题目录!本系列旨在帮助您巩固和提升您对Python循环结构的理解和应用能力。循环结构是编程中的重要概念之一,通过它,您可以轻…

OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法

项目实训一 本实训任务对实验环境要求较高,而且过程比较复杂,涉及的步骤非常多,有一定难度,可根据需要选做。可以考虑改为直接观看相关的微课视频 【实训题目】 增加一个计算节点并进行实例冷迁移 【实训目的】 熟悉增加一个…