当前位置: 首页 > news >正文

SpringBoot中如何自定义自己的过滤器Filter(简易版)

本文不再说SpringMVC中的写法,毕竟现在项目都是SpringBoot,我们还是尽量使用SpringBoot的写法,首先了解一下Filter。

说白了,就是在请求到达服务器之前进行拦截,一般使用场景是拦截登录进行权限校验,当然一般是使用权限框架中提供的过滤器去处理,我们这里主要作为理解为什么需要它,工作原理是什么。

1.过滤器的生命周期

Ⅰ.init()方法:在程序启动时就会执行,并且只执行一次,后续再有请求过来也不会执行。
Ⅱ.doFilter()方法:这个主要是拦截到请求,进行业务处理,例如权限校验。
Ⅲ.destory()方法:当我们关闭程序时会主执行该方法。

2.创建过滤器,重写方法

@Slf4j
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("过滤器-------init初始化执行了");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("过滤器------doFilter方法执行了");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {log.info("过滤器------销毁了");}}

我们重写它的生命周期方法。重点关注一下doFilter这个方法,这个就是我们里面做重要业务逻辑处理的方法,即便以后遇到认证框架提供的过滤器,也会有相类似的方法,他的原理跟这个类似,
filterChain.doFilter(servletRequest, servletResponse);这个方法是代表放行的,如果在里面判断不符合或者是不想让这个请求过去,直接return;。基本上认证框架也是这个原理。

3.配置过滤器,交给Spring管理

@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean<MyFilter> myFilterRegistration() {FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();registrationBean.setFilter(new MyFilter());registrationBean.addUrlPatterns("/test1/*","test2/*");  //设置拦截的路径规则registrationBean.setName("MyFilter");return registrationBean;}}

其实就是配置了一个FilterRegistrationBean,设置过滤器为刚才我们自己创建的过滤器MyFilter,设置拦截的路径规则,例如/test1/*,这个他是不定参数,可以配置多个拦截路径,这里需要注意一下,正常来说/*只拦截当前路径,不会拦截子路径,而/**是会拦截所有路径的,但是在这个类里面,我测试的结果是/*会拦截所有的路径,例如/test1/*会拦截/test1/aa和/test1/aa/bb,而/test1/**什么都不会拦截,我觉得他可能把**当作一个普通字符串去看待了,不过在正常的认证框架里还是用的/**,这里作为了解即可。

接下来就是,一旦拦截到符合路径规则的请求,就会到doFilter方法中进行对应的操作。
 

相关文章:

SpringBoot中如何自定义自己的过滤器Filter(简易版)

本文不再说SpringMVC中的写法&#xff0c;毕竟现在项目都是SpringBoot&#xff0c;我们还是尽量使用SpringBoot的写法&#xff0c;首先了解一下Filter。 说白了&#xff0c;就是在请求到达服务器之前进行拦截&#xff0c;一般使用场景是拦截登录进行权限校验&#xff0c;当然一…...

python游戏开发之五子棋游戏制作

五子棋是一种源自中国的传统棋类游戏&#xff0c;起源可以追溯到古代。它是一种两人对弈的游戏&#xff0c;使用棋盘和棋子进行。棋盘通常是一个 1515 的网格&#xff0c;棋子分为黑白两色&#xff0c;双方轮流在棋盘上落子。游戏的目标是通过在棋盘上落子&#xff0c;使自己的…...

鸿蒙开发之MD5加密实现

废话不多说&#xff0c;本章节我们实现鸿蒙两种MD5加密实现方法。 一、使用鸿蒙系统库 import cryptoFramework from ohos.security.cryptoFramework; import buffer from ohos.buffer;async function doMd() {let mdAlgName "MD5"; // Algorithm to use.let mess…...

vue3插槽v-slot传入变量报错,纠正写法

vue3插槽v-slot传入变量报错&#xff0c;纠正写法。插槽变量 代码 <template v-slot:item.equity"{ item }"> // item.equity能使用但是飙红<template v-slot:[item.equity]"{ item }"> // 改为[]...

cuda函数说明

一 基础函数 C 1 cudaMalloc cudaMalloc(void ** devPtr,size_t count) 第一参数需要是指针的指针&#xff0c;可能需要类型转换 2 cudaMemcpy cudaError_t cudaMemcpy(void *dst,const void * src,size_t count,enum cudaMemcpyKind kind) 参数是指针&#xff0c;这和cu…...

如何将PostgreSQL的数据实时迁移到SelectDB?

将PostgreSQL的数据实时迁移到SelectDB&#xff08;如StarRocks、ClickHouse等类似的数据仓库&#xff09;可以通过以下几种方式实现&#xff0c;常见的方法包括使用数据复制工具、数据流工具和ETL工具。以下是一个详细的实现步骤指南&#xff1a; 方法1&#xff1a;使用Debez…...

高级java每日一道面试题-2024年8月06日-web篇-cookie,session,token有什么区别?

如果有遗漏,评论区告诉我进行补充 面试官: cookie,session,token有什么区别? 我回答: 在Web开发中&#xff0c;cookie、session和token是三种常见的用于用户身份验证和会话管理的技术。它们各自有不同的用途和优缺点&#xff0c;下面将详细解释&#xff1a; 1. Cookie 定…...

搜索 ---- 练习题(洛谷)

文章目录 洛谷练习题[P1019 单词接龙 ](https://www.luogu.com.cn/problem/P1019)思路代码 [P1025 数的划分](https://www.luogu.com.cn/problem/P1025)思路代码 P1037 产生数思路代码 P1406 方格填数思路代码 P2392 kkksc03考前临时抱佛脚思路代码&#xff08;搜索&#xff09…...

C#中重写tospring方法

在C#中&#xff0c;重写ToString方法允许你自定义对象的字符串表示形式。当你想要打印对象或者在调试时查看对象的状态时&#xff0c;重写ToString方法非常有用。 默认情况下&#xff0c;ToString方法返回对象的类型名称。通过重写这个方法&#xff0c;你可以返回一个更有意义…...

图解RocketMQ之如何实现事务消息

大家好&#xff0c;我是苍何。 说起事务消息&#xff0c;你可能和我一样一开始有一些懵逼&#xff0c;但说起事务和分布式事务&#xff0c;我想对于八股选手来说&#xff0c;再熟悉不过了。 事务消息就是利用消息队列实现分布式事务的一种解决方案&#xff0c;而 RocketMQ 又…...

C代码做底层及Matlab_SimuLink做应用层设计单片机程序

前言:SimuLink工具极其强大,但是能直接支持单片机自主开发的很少,造成这个问题的原因主要是我们使用的芯片底层多是C代码工程,芯片厂家也只提供C代码库,很少能提供SimuLink的支持库,即使提供也不是很不完善,如NXP的一些芯片提供的SimuLink库不含盖高级应用,再比如意法半…...

【生成式人工智能-六-AI Agent】

AI Agent AI Agent 能做什么现在的AI Agent 模型AI Agent都能做些什么呢AI Agent可能的运作原理 现在语言模型已经做到&#xff0c;你告诉做什么&#xff0c;它就去做什么了&#xff0c;比如你告诉他翻译&#xff0c;他就会翻译&#xff0c;告诉它摘要&#xff0c;他就会摘要&a…...

前端day3-表格

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>day3-表格</title> </head> <body&g…...

idea中好用的插件

输入法自动切换插件 自动切换输入法插件&#xff1a;Smart Input。编写代码时自动切换到英文输入法&#xff0c;注释代码自动切换为中文输入法。极大的提升我们的编码效率。 MyBatisX插件 MybatisX 是一款基于 IDEA 的快速开发插件&#xff0c;为效率而生。主要用于XML映射配…...

openmetadata自定义连接器开发教程

openmetadata自定义连接器开发教程 一、开发通用自定义连接器教程 官网教程链接&#xff1a; 1.https://docs.open-metadata.org/v1.3.x/connectors/custom-connectors 2.https://github.com/open-metadata/openmetadata-demo/tree/main/custom-connector &#xff08;一&…...

随便记点知识点

常用的IO接口函数 标准IO&#xff1a;fprint、fscanf、fputc、fgetc、fputs、fgets、fread、 fwrite、fopen、fclose、fseek、ftell、rewind。。。 文件IO&#xff1a;open、close、read、write、seek。。。 SEEK_SET: 文件头部 SEEK_END: 文件结束&#xff0c; EOF SEEK_C…...

Flamingo: a Visual Language Model for Few-Shot Learning

发表时间&#xff1a;NeurIPS 2022 论文链接&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位&#xff1a;DeepMind Motivation&#xff1a;仅使用少量注释示例可以快速适应新任务…...

【vulnhub】Matrix:1靶机

靶机安装 下载地址&#xff1a;https://download.vulnhub.com/matrix/Machine_Matrix.zip 运行环境&#xff1a;VirtualBox 信息收集 靶机扫描 netdiscover -i eth0 -r 192.168.7.0/24 端口扫描&#xff0c;开放端口22、80、31337 nmap -A 192.168.7.203 -p- 目录扫描 d…...

VMwave安装Ubuntu20.04超详细图文教程(附VMwave17.5安装包)

VMwave安装 Ubuntu20.04 超详细图文教程 一、VMwave安装 官网下载 网盘下载 二、Ubuntu下载 三、Ubuntu20.04安装 四、安装VMwave tools 五、更改Ubuntu软件源 注&#xff1a;写教程的时候博主用的是VMware Workstation pro 17(VM17.5) 一、VMwave安装 以下我提供两…...

C# 方法的定义

方法的由来 1.方法(method)的前身是C/C语言的函数(function) 方法是面向对象范畴的概念&#xff0c;在非面向对象语言中仍然称为函数 2.永远都是类(或结构体)的成员 C#语言中函数不可能独立于类(或结构体)之外 只有作为类(结构体)的成员时才被称为方法 C中是可以的&#xf…...

Stream API:驾驭数据流的艺术

在这个数据驱动的时代&#xff0c;如何高效地处理大量数据成为了一项必备技能。Java 8引入的Stream API正是为此而生&#xff0c;它不仅极大地简化了集合操作&#xff0c;还提供了强大的功能来帮助开发者以更加简洁优雅的方式处理数据。今天&#xff0c;就让我们一起探索Stream…...

JS操作dom修改Element中DatePicker的数据

let start document.querySelector(input[placeholder"请选择开始日期"]); start.value 2024-04-25 start.dispatchEvent(new Event(input)) var enterKeyEvent new KeyboardEvent(keydown, { key: Enter, code: Enter, keyCode: 13, // keyCode属性已被废弃&a…...

【QT学习】自定义标题栏

内容&#xff1a; 实现标题栏的自定义以及窗口缩放事件的重写。 自定义了一个标题栏类CommonTitleBar&#xff1a; .h文件 #pragma once #include <qwidget.h> #include <qpushbutton.h> #include <qlabel.h> #include <QHBoxLayout> #include <Q…...

代码随想录算法训练营第四天(二)|面试题 02.07. 链表相交 142.环形链表II

面试题 02.07. 链表相交 题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环…...

智能编程新纪元:腾讯AI代码助手的高效编程体验

智能编程新纪元&#xff1a;腾讯AI代码助手的高效编程体验 智能编程新纪元&#xff1a;腾讯AI代码助手的高效编程体验引言一、配置开发环境二、AI助手实现高效编程2.1 AI助手自动补全2.2 AI助手实现编程思维2.3 AI助手高效注解2.4 AI助手打破语言壁垒 三、帮助和提升四、优化和…...

人大金仓(Kingbase)数据库高阶函数详解

人大金仓&#xff08;Kingbase&#xff09;数据库高阶函数详解 人大金仓&#xff08;Kingbase&#xff09;数据库是一款基于 PostgreSQL 的国产关系型数据库(PostgreSQL 高阶函数详解&#xff1a;全面深入的功能与实用示例 )&#xff0c;提供了丰富的高阶函数&#xff0c;以支…...

MFC接收回车事件PreTranslateMessage

MFC截获回车事件PreTranslateMessage 有时候设备上会带有扫码枪&#xff0c;在设置里把扫码枪结束设置成回车。 在MFC中&#xff0c;PreTranslateMessage是虚函数&#xff0c;是用来截获消息的。我们可以通过重载它来处理键盘和鼠标消息。 CtrlShiftX 调出来 MFC类向导&#x…...

org.gitlab4j使用报错问题

报错如上&#xff0c;刚开始报错Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/core/StreamingOutput。 原因&#xff1a;项目是JDK17引起的版本不兼容 解决&#xff1a;升级高版本即可。...

【生成式人工智能-五-大模型的修炼-阶段三RLHF】

大模型的修炼-RLHF 增强式学习 大模型修炼阶段Instruct Fine-tune 和 RLHF 的区别和联系 回馈模型 Reward Model增强式学习的难题怎么定义什么是好的&#xff1f;人类也无法判定好坏的 大模型是如何具备人工智能的呢&#xff1f; 上面一篇文章介绍到了前两个阶段&#xff0c;接…...

【溯源反制】反制攻击者-蚁剑低版本

目录 安装 攻击者获取防守方的权限 防守方反制攻击者 防守方获取攻击者的shell权限 安装 安装蚁剑2.0.7版本 链接&#xff1a;https://pan.baidu.com/s/1t40UxkZ2XuSWG6VCdGzvDw?pwd8888 提取码&#xff1a;8888 下载好后先打开Loader文件夹下的.exe文件&#xff0c;打…...

64 lambda 表达式

lambda 表达式常用来声明匿名函数&#xff0c;即没有函数名字的临时使用的小函数&#xff0c;常用在临时需要一个类似于函数的功能但又不想定义函数的场合。 lambda 表达式只可以包含一个表达式&#xff0c;不允许包含其他复杂的语句&#xff0c;但在表达式中可以调用其他函数…...

Vatee万腾平台:企业数字化转型的助推器

在数字化浪潮席卷全球的今天&#xff0c;企业数字化转型已成为不可逆转的趋势。面对这一挑战与机遇并存的局面&#xff0c;Vatee万腾平台凭借其深厚的技术底蕴和前瞻性的战略眼光&#xff0c;成为了众多企业数字化转型道路上的坚实后盾和强大助推器。 Vatee万腾平台深刻理解数字…...

安卓常用控件ListView

文章目录 ListView的常用属性ListView的常用APIListView的简单使用 ListView是一个列表样式的 ViewGroup&#xff0c;将若干 item 按行排列。它是一个很基本的控件也是 Android 中最重要的控件之一。它可以实现多个 View 的垂直排列并支持滚动显示效果。 ListView的常用属性 常…...

【MCAL】TC397+EB-tresos之ADC配置实战 - (模数转换)

本篇文章首先从理论讲起&#xff0c;基于《MC-ISAR_TC3xx_UM_Adc.pdf》介绍了ADC模块的理论知识&#xff0c;然后详细介绍了在TC397平台使用EB-tresos对ADC驱动模块进行配置与调试的实战过程&#xff0c;帮助第一次接触这个模块的读者能够更快的上手来实现符合自己项目要求的开…...

搜维尔科技:如何使用 SenseGlove Nova 在其“CAVE”投影室中操纵虚拟物体

AVR 创建了一个创新的基于 PC 的多面沉浸式环境&#xff0c;参与者完全被虚拟图像和声音包围。 需要解决的挑战&#xff1a; 传统的 VR 系统通常缺乏逼真的触觉反馈&#xff0c;限制了用户的沉浸感。AVR Japan 旨在通过将触觉技术融入其 CAVE 系统来解决这一挑战&#xff0c;使…...

R 语言学习教程,从入门到精通,R的安装与环境的配置(2)

1、R的安装与环境的配置 R语言是一款完全免费且开源的软件&#xff0c;它的开源许可证是GNU通用公共许可证&#xff08;GPL&#xff09;&#xff0c;这意味着任何人都可以自由地使用、复制、修改和发布R语言的源代码&#xff0c;甚至可以将其用于商业用途。 和python等其他语言…...

Unity导入Avpro插件(3.0.8版本)打包安卓时报错

报错信息&#xff08;部分&#xff09; Exception while marshalling C:\Program Files\Unity\Hub\Editor\2022.3.34f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\SDK\build-tools\32.0.0\package.xml. Probably the SDK is read-only Exception while marshalling C:\Prog…...

新手必看!剪映轻松上手,让你的视频瞬间高大上

相信现在短视频兴起的时代下&#xff0c;几乎人手都在学习如何剪辑出日常视频&#xff0c;尤其是想要走新媒体路线的小伙伴更是在尝试专业的剪辑&#xff0c;不过平时的vlog或者抖音短视频可以从简单的开始接触&#xff0c;剪映是其中的一款适合初学者上手的剪辑了&#xff0c;…...

Centos 8系统ext4文件系统类型进行扩容缩容 (LVM)

Centos 8系统ext4文件系统类型进行扩容缩容 &#xff08;LVM&#xff09; 1.磁盘情况&#xff1a;2.缩容home分区1.备份home数据&#xff1a;2.查找使用 /home 的进程&#xff1a;3.终止这些进程&#xff1a;4.卸载 /home 分区5.检查文件系统一致性 (e2fsck)&#xff1a;6.调整…...

计算机毕业设计选题推荐-基于网页开发和数据抓取技术的在线新闻聚合平台-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

测试电脑硬件及显卡CPU性能工具(免费)

电脑测评 电脑测评软件 本文摘要图吧工具箱&#xff08;软件名称&#xff09;1.显卡CPU测试2.磁盘读写速度测试3.屏幕测试&#xff0c;坏点测试&#xff08;检测屏幕上是否有坏的点&#xff09;4.部署映像服务和管理工具5.快速查找工具&#xff08;everything&#xff09; 本文…...

leetcode面试算法题

1.数组/字符串 1.1合并两个有序数组 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 0;//遍历数组1int p2 0;//遍历数组2int[] nums3 new int[m n];int p 0;while (p1 < m && p2 < n) {//当数组1、2都没遍历完nums3[…...

springboot 股票资产管理系统-计算机毕业设计源码96208

摘要 随着全球金融市场的快速发展&#xff0c;股票交易和投资已经成为重要的经济活动之一。在此背景下&#xff0c;股票资产管理系统的设计与实现显得尤为重要。Spring Boot框架&#xff0c;以其快速、简洁和高效的特性&#xff0c;在股票资产管理系统的开发中得到了广泛应用。…...

在Nestjs使用mysql和typeorm

1. 创建项目 nest new nest-mysql-test 2. 添加config 安装 nestjs/config 包 pnpm i --save nestjs/config 添加 .env 文件 DATABASE_HOSTlocalhost DATABASE_PORT3306 DATABASE_USERNAMEroot DATABASE_PASSWORD123456 DATABASE_DBdbtest 创建 config/database.config.…...

【百度面试算法题】2024-08-02

部门项目实际上也涉及到多种语言&#xff0c;有没有意愿去学习其他语言&#xff1f;你是如何利用数据结构来做技术的/项目中是如何解决高并发的&#xff1f;&#xff08;没听懂问题…就直接开始介绍项目了…后来被打断说不进行发散了&#xff0c;开始问八股&#xff09;说一下单…...

【SAM2分割万物—本地部署:实时分割图像、视频】OSError:未设置环境变量CUDA_HOME。请将其设置为您的 CUDA 安装根目录。

文章目录 1.配置SAM22.可能在pip install -e .时报错2.1.方法--no-build-isolation2.2.原因 3.开始 参考&#xff1a;segment-anything-2 github 支持box、点输入、mask输入指导SAM2来试试分割视频、图像 1.配置SAM2 注意&#xff1a;需要 python>3.10&#xff0c;以及 torc…...

20240807提取飞凌OK3588-C的IMG固件中的时钟频率link_freq和pixel_clock

20240807提取飞凌OK3588-C的IMG固件中的时钟频率link_freq和pixel_clock 2024/8/6 16:32 缘起&#xff1a;调试代码的时候边调试变修改&#xff0c;在优化MIPI CSI时钟的时候&#xff0c;越改越差&#xff01;最后变成了负优化。 现在源代码/C文件找不到了&#xff0c;但是还有…...

JAVA毕业设计158—基于Java+Springboot的二手车交易管理系统(源代码+数据库+万字论文+ppt)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的二手车交易管理系统(源代码数据库万字论文ppt)158 一、系统介绍 本项目前后端不分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#…...

jupyter for c++

jupyter for c++ jupyter for c++ jupyter for c++配置环境问题参考文档配置环境 需要 clang 编译器 安装 aconda 默认情况下,anaconda navigator包与anaconda Distribution一起安装,并包含依赖包qt。默认情况下,qt的所有依赖项也应安装,但某些版本的Anaconda Distribution…...

TVS管(瞬态电压抑制二极管)的了解

TVS即Transient Volatge Suppressor&#xff0c;中文名称&#xff1a;瞬态电压抑制二极管&#xff0c;又称雪崩击穿二极管。但在通常情况下&#xff0c;我们称之为TVS二极管。其在电路中的作用主要是保护敏感电路&#xff0c;免受高电压瞬变损坏的组件。其中&#xff0c;大部分…...