FilterRegistrationBean能不能排除指定url
文章目录
- 什么是FilterRegistrationBean
- 举个栗子
- 但是如果我想要排除某些uri
- 方法
- 总结FilterRegistrationBean只能设置指定的url进行过滤,而不能指定排除uri,只能使用OncePerRequestFilter的shouldNotFilter方法,排除uri
什么是FilterRegistrationBean
FilterRegistrationBean是Spring框架中的一个重要组件,它的作用是注册和管理过滤器。在Web应用程序中,过滤器是用于拦截HTTP请求和响应的组件。FilterRegistrationBean可以通过Java代码配置,也可以通过XML配置文件进行配置。
FilterRegistrationBean的工作原理是在Spring应用程序启动时,自动扫描并注册所有配置的过滤器。这些过滤器可以拦截HTTP请求和响应,并执行一些预定义的操作。例如,过滤器可以检查请求参数、修改请求头、记录请求日志等。
FilterRegistrationBean的使用非常灵活,可以根据具体的需求进行配置。例如,可以指定过滤器的名称、URL模式、执行顺序等。
举个栗子
上篇文章针对全局日志的文章https://blog.51cto.com/u_16174475/7335078
针对全局的日志traceId处理,就使用了FilterRegistrationBean注册LogFilter
package com.study.springbootplus.config;import com.study.springbootplus.utils.ThreadMdcUtil;
import org.slf4j.MDC;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class LogFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {ThreadMdcUtil.setTraceIdIfAbsent();try {filterChain.doFilter(request, response);} finally {response.addHeader(ThreadMdcUtil.TRACE_ID, MDC.get(ThreadMdcUtil.TRACE_ID));ThreadMdcUtil.remove();}}
}
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Beanpublic FilterRegistrationBean logFilter() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new LogFilter());filterRegistrationBean.setOrder(Integer.MIN_VALUE);return filterRegistrationBean;}
FilterRegistrationBean还支持许多其他属性。例如,可以指定过滤器的初始化参数、异步支持、servlet名称等。以下是一些常用的属性:
- filter:指定要注册的过滤器实例。
- urlPatterns:指定过滤器要拦截的URL模式。
- name:指定过滤器的名称。
- order:指定过滤器的执行顺序。
- initParameters:指定过滤器的初始化参数。
- asyncSupported:指定是否支持异步操作。
- servletNames:指定要拦截的Servlet名称。
但是如果我想要排除某些uri
有些filter想要排除部分uri,使用FilterRegistrationBean 该怎么操作呢?
FilterRegistrationBean 里面的方法比如addUrlPatterns,只能用来指定uri,并没有其他方法来进行过滤uri,所以只能在继承OncePerRequestFilter的LogFilter里面实现
方法
OncePerRequestFilter有个shouldNotFilter方法,用来排除uri,如果需要排除的uri是固定的话就只需要在方法里面加上排除的uri:
@Overrideprotected boolean shouldNotFilter(HttpServletRequest request) {String requestURI = request.getRequestURI();return requestURI.startsWith("/actuator")|| requestURI.startsWith("/captcha");}
如果是多个项目使用,不同项目需要指定不同url,那就可以在LogFilter定义一个List,然后在初始化的时候set需要过滤的uri就可以:
package com.study.springbootplus.config;import com.google.common.collect.Lists;
import com.study.springbootplus.utils.ThreadMdcUtil;
import org.slf4j.MDC;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;public class LogFilter extends OncePerRequestFilter {private static List<String> excludes = Lists.newArrayList();public static void setExcludes(List<String> excludes) {LogFilter.excludes = excludes;}@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {ThreadMdcUtil.setTraceIdIfAbsent();try {filterChain.doFilter(request, response);} finally {response.addHeader(ThreadMdcUtil.TRACE_ID, MDC.get(ThreadMdcUtil.TRACE_ID));ThreadMdcUtil.remove();}}@Overrideprotected boolean shouldNotFilter(HttpServletRequest request) {return excludes.contains(request.getRequestURI());}
}
在使用的地方:
@Beanpublic FilterRegistrationBean logFilter() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();LogFilter logFilter = new LogFilter();logFilter.setExcludes(Lists.newArrayList("/aaa", "/bb"));filterRegistrationBean.setFilter(logFilter);filterRegistrationBean.setOrder(Integer.MIN_VALUE);return filterRegistrationBean;}
总结FilterRegistrationBean只能设置指定的url进行过滤,而不能指定排除uri,只能使用OncePerRequestFilter的shouldNotFilter方法,排除uri
相关文章:
FilterRegistrationBean能不能排除指定url
文章目录 什么是FilterRegistrationBean举个栗子但是如果我想要排除某些uri方法总结FilterRegistrationBean只能设置指定的url进行过滤,而不能指定排除uri,只能使用OncePerRequestFilter的shouldNotFilter方法,排除uri 什么是FilterRegistrationBean FilterRegistrationBean是…...
【LeetCode】36. 有效的数独
1 问题 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图&…...
华为---PPP协议简介及示例配置
PPP协议简介 PPP是Point-to-Point Protocol的简称,中文翻译为点到点协议。与以太网协议一样,PPP也是一个数据链路层协议。以太网协议定义了以太帧的格式,PPP协议也定义了自己的帧格式,这种格式的帧称为PPP帧。 利用PPP协议建立的二层网络称为…...
asp.net老年大学信息VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机毕业设计
一、源码特点 asp.net老年大学信息管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c# 语言开发 asp.net老年大学信息管理系统…...
模型量化笔记--对称量化和非对称量化
1–量化映射 量化映射的通用公式为: r S ( q − Z ) r S(q - Z) rS(q−Z) 其中r表示量化前数据的真实值,S表示缩放因子,q表示量化后的数值,Z表示零点 2–非对称量化 非对称量化需要一个偏移量Z来完成零点的映射,即量化前的零…...
PA2019 Terytoria
洛谷P5987 [PA2019] Terytoria 题目大意 在一个平面直角坐标系上,有一个长度为 X X X,宽度为 Y Y Y的地图,这个地图的左边界和右边界是连通的,下边界和上边界也是连通的。 在地图中,有 X Y X\times Y XY个格子以及…...
内容分发网络CDN分布式部署真的可以加速吗?原理是什么?
Cdn快不快?她为什么会快?同样的带宽为什么她会快?原理究竟是什么,同学们本着普及知识的想法,我了解的不是很深入,适合小白来看我的帖子,如果您是大佬还请您指正错误的地方,先谢谢大佬…...
微服务docker部署实战
docker基础和进阶(*已掌握的可以跳过 *) 基础 docker基础 进阶 docker进阶 准备工作 提前准备好mysql和redis的配置,如下 在/zzq/mysql/conf目录下配置mysql配置文件my.cnf [client] #设置客户端字符集 default_character_setutf8 [mysqld] #开启定时任务 event_s…...
js实现拖拽功能
基于onMouseDown 、onMouseMove 、onMouseUp 使用 mousedown、mousemove 和 mouseup 事件来实现拖拽的基本思路是: 在 mousedown 事件中,开始追踪拖拽操作并记录鼠标按下的位置。 在 mousemove 事件中,根据鼠标的移动,更新被拖拽…...
数据库主从切换过程中Druid没法获取连接错误
背景: 今天dba在进行DB的主从切换,导致应用一直报错,获取不到DB连接,druid的错误信息如下: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutExc…...
【iOS】Mac M1安装iPhone及iPad的app时设置问题
【iOS】Mac M1安装iPhone及iPad的app时设置问题 简介一,设置问题二,适配问题 简介 由于 苹果M1芯片的Mac可用安装iPhone以及iPad应用,因为开发者并没有适配Mac,因此产生了很多奇怪问题,这里总结归纳Mac M1安装iPhone和…...
Springboot 启动报错@spring.active@解析错误
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character that cannot start any token. (Do not use for indentation)in reader, line 10, column 13:active: spring.active^查看是否勾选...
【算法挨揍日记】day15——560. 和为 K 的子数组、974. 和可被 K 整除的子数组
560. 和为 K 的子数组 560. 和为 K 的子数组 题目描述: 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 解题思路: 我们可以很容易想到暴力解法…...
数字时代的探索与革新:Socks5代理的引领作用
在当今快速发展的数字时代,技术创新推动着社会的变革与进步。Socks5代理作为一项重要的网络技术,正引领着跨界电商、爬虫数据分析、企业全球化和游戏体验优化等领域的发展。本文将深入探讨Socks5代理技术在这些领域中的引领作用,以及它如何塑…...
算法-堆/归并排序-排序链表
算法-堆/归并排序-排序链表 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/sort-list/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 优先级队列构建大顶堆 2.1 思路 优先级队列构建小顶堆链表所有元素放入小顶堆依次取出堆顶…...
word 如何编写4x4矩阵
百度上给的教程,打印出来没有对齐 https://jingyan.baidu.com/article/6b182309995f8dba58e159fc.html 百度上的方式试了一下,不会对齐。导致公式看起来很奇怪。 下面方式会自动对齐 摸索了一下发现可以用下面这种方式编写 4x4 矩阵。先创建一个 3x3…...
INTELlij IDEA编辑VUE项目
菜单中选择setting–>Plugins 或者快捷键 ctrlalts 搜索vue,但有些情况会搜索不出来,先说搜索到的情况 如下图所示: 如果没有vue.js则说明过去已经安装了。 搜索到了后点击Install安装即可, 但即使搜索成功了,也不…...
linux进程间通讯--信号量
1.认识信号量 方便理解:信号量就是一个计数器。当它大于0能用,小于等于0,用不了,这个值自己给。 2.特点: 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。信号量基于操作系统的 PV 操作&am…...
VS Code连接远程Linux服务器开发c++项目
1.在远程 Linux 上安装包 yum groupinstall "development tools" -y yum install cmake -y2.在 VSCode 上安装插件 C/CC/C Extension PackCMakeCMake ToolsCMake Language Support 3.连接远程Linux服务器...
stable diffusion的模型选择,采样器选择,关键词
一、Stable Diffusion的模型选择: 模型下载地址:https://civitai.com/,需要科学上网。 Deliberate:全能模型,prompt越详细生成的图片质量越好Realistic Vision:现实模型,生成仿真式图片&#…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
FTXUI::Dom 模块
DOM 模块定义了分层的 FTXUI::Element 树,可用于构建复杂的终端界面,支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...
二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...
