过滤器(Filter)
过滤器(Filter)
1. 基本概念
过滤器(Filter)是拦截 Request 请求的对象:在用户的请求访问资源前处理 ServletRequest 和 ServletResponse 。
Filter 相关的接口有:Filter、FilterConfig、FilterChain 。
Filter 的实现必须实现 Filter 接口。这个接口包含了 Filter 的3个生命周期方法:init()、doFilter()、destroy() 。
Servlet 容器(Tomcat)初始化Filter时,会触发 Filter 的 init() 方法,一般来说是在应用开始时(注意,不是第一次使用时)。这个方法只会被调用一次。
FilterConfig 对象由 Servlet 容器传入 init() 方法中。
当 Servlet 容器每次处理 Filter 相关的资源时,都会调用该 Filter 实例的 doFilter() 方法。就像容器调用 Serviet 的 service() 方法。
在 Filter 的 doFilter() 方法中,最后一行需要调用 FilterChain 中的 doChain() 方法。注意,FilterChain 是 doFilter() 方法的第三个参数。
一个 URL 资源可能被多个 Filter 关联(即一条 Filter 链),这时 Filter.doFilter() 的方法将触发 Filter 链中下一个 Filter。只有在 Filter 链中最后一个 Filter 里调用 doFilter() 方法,才会触发 Controller 中处理 URL 资源的方法。
如果在 Filter 的 doFilter() 方法中,因为故意(或无意)没有调用 FilterChain 的 doFilter() 方法,那么这个 Request 请求将终止,后面的处理就会中断。
注意,FilterChain 接口中,唯一的方法就是 doFilter() 方法,它和 Filter 接口中的 doFilter() 方法定义是不一样的。
Filter 接口中,最后一个方法是 destroy(),该方法在 Servlet 容器要销毁 Filter 时触发。
类似于 Servlet,Filter 也是单例。
2. Filter 的配置
和 Servlet 的配置非常相似,Filter 的配置主要有三方面:
- 确认哪些资源需要本 Filter 进行拦截处理。
- 配置 Filter 的初始化参数和值,这些参数在 Filter 的
init()方法中可以读取到。- 给 Filter 取一个名称(一般来说这个配置是不需要的)。在一些特殊的情况下,系统通过这个名字来识别Filter。
@WebFilter(filterName = "firstFilter",urlPatterns = {"/*"},initParams = {@WebInitParam(name="", value=""),@WebInitParam(name="", value="")})
public class FirstFilter implements Filter {...
}
<filter><filter-name>firstFilter</filter-name><filter-class>com.hemiao.filter.FirstFilter</filter-class><init-param><param-name>author</param-name><param-value>ben</param-value></init-param><init-param><param-name>email</param-name><param-value>hemiao3000@126.com</param-value></init-param>
</filter>
<filter-mapping><filter-name>firstFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
相关文章:
过滤器(Filter)
过滤器(Filter) 1. 基本概念 过滤器(Filter)是拦截 Request 请求的对象:在用户的请求访问资源前处理 ServletRequest 和 ServletResponse 。 Filter 相关的接口有:Filter、FilterConfig、FilterChain 。…...
AMRT3D数字孪生引擎详解
AMRT 3D数字孪生引擎介绍 AMRT3D引擎是一款融合了眸瑞科技的AMRT格式与轻量化处理技术为基础,以降本增效为目标,支持多端发布的一站式纯国产自研的CS架构项目开发引擎。 引擎包括场景搭建、UI拼搭、零代码交互事件、光影特效组件、GIS/BIM组件、实时数据…...
Sqlite数据库详解
1.关于Sqlite SQLite 是一个进程内库,它实现了一个独立的、无服务器的、零配置的事务性 SQL 数据库引擎。 SQLite的代码属于公共领域,因此对 用于任何目的,商业或私人目的。 SQLite是世界上部署最广泛的数据库 应用程序比我们能做的要多 计数…...
基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统
wx供重浩:创享日记 对话框发送:225头盔 获取完整源码源文件已标注的数据集(1463张)源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通,有偿59yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…...
【数据结构】B树,B+树,B*树
文章目录 一、B树1.B树的定义2.B树的插入3.B树的中序遍历 二、B树和B*树1.B树的定义2.B树的插入3.B*树的定义4.B树系列总结 三、B树与B树的应用 一、B树 1.B树的定义 1. 在内存中搜索效率高的数据结构有AVL树,红黑树,哈希表等,但这是在内存…...
常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好
PFA容量瓶规格参考:10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验,也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…...
【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理
k8s集群的三种接口 k8s集群有三大接口: CRI:容器进行时接口,连接容器引擎--docker、containerd、cri-o、podman CNI:容器网络接口,用于连接网络插件如:flannel、calico、cilium CSI:容器存储…...
Pycharm一直打不开,无任何报错
我windows安装了pycharm一直打不开(无论专业版还是社区版都打不开),无任何弹窗,无任何报错 最后解决问题: 查看环境变量PYCHARM_VM_OPTIONS 发现有一个环境变量PYCHARM_VM_OPTIONS 删除PYCHARM_VM_OPTIONS这个环境变量,pycharm终…...
用html编写的小广告板
用html编写的小广告板 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…...
hive中如何取交集并集和差集
交集 要获取两个表的交集,你可以使用INNER JOIN或者JOIN: SELECT * FROM table1 JOIN table2 ON table1.column_name table2.column_name;也可以使用 INTERSECT 关键字 SELECT * FROM table1 INTERSECT SELECT * FROM table2;并集 要获取两个表的并集…...
2024.2.26
今天又复习了一下熟悉的C语言 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<windows.h>int main() {//数组初始化int n;scanf("%d", &n);int array[500];int i 0;for (i 0; i < n; i){scanf("%…...
【kubernetes】关于k8s集群的声明式管理资源
目录 一、声明式管理方法 二、资源配置清单管理 1、导出资源配置清单 2、修改资源配置清单并应用 2.1离线修改 2.2在线修改 三、通过资源配置清单创建资源对象 获取K8S资源配置清单文件模板? 关于配置清单常见的字段 方案一:手写yaml配置文件 …...
8.openEuler操作系统网络管理和防火墙(二)
openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议安装麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 3.通过IP命令配置网络 配置IP地址: 使用ip命令为接口配置地址,命令格式如下,其中 interface-name 为网卡名…...
1904_ARM Cortex M系列芯片特性小结
1904_ARM Cortex M系列芯片特性小结 全部学习汇总: g_arm_cores: ARM内核的学习笔记 (gitee.com) ARM Cortex M系列的MCU用过好几款了,也涉及到了不同的内核。不过,关于这些内核的基本的特性还是有些不了解。从ARM的官方网站上找来了一个对比…...
热闹元宵进行中,如何利用VR全景展示民宿品牌形象?
错峰出游闹元宵,元宵节恰逢周末,而且还是春节假期返工之后的首个休息日,不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”,那么如何知道特价酒店服务好不好呢?先别…...
css3实现无缝滚动,鼠标经过暂停
js也可以实现,但css3更加的平滑和资源占用更少。下面是具体代码,动画要单独用一个类名,否则暂停估计不会生效: 原理:动画向上移动,目标完全消失后,从头开始,注意 动画移动高度是文本…...
SpringCache缓存专题
SpringCache缓存专题 学习目标 1、理解缓存存在的意义 2、掌握redis与SpringCache的集成方式 3、掌握SpringCache注解的使用 4、掌握项目集成SpringCache流程 第一章 基于SpringCache缓存方案 1.为什么需要缓存 前台请求,后台先从缓存中取数据࿰…...
Doris实战——结合Flink构建极速易用的实时数仓
目录 一、实时数仓的需求与挑战 二、构建极速易用的实时数仓架构 三、解决方案 3.1 如何实现数据的增量与全量同步 3.1.1 增量及全量数据同步 3.1.2 数据一致性保证 3.1.3 DDL 和 DML 同步 Light Schema Change Flink CDC DML 和DDL同步 3.2 如何基于Flink实现多种数…...
阿里开源低代码引擎 - Low-Code Engine
阿里开源低代码引擎 - Low-Code Engine 本文主要介绍如何在Windows运行/开发阿里开源低代码引擎 - Low-Code Engine 详细文档参见【 阿里开源低代码引擎 - Low-Code Engine 官方文档】 目录 阿里开源低代码引擎 - Low-Code Engine一、环境准备1、使用 WSL 在 Windows 上安装 L…...
2024-02-23(Spark)
1.RDD的数据是过程数据 RDD之间进行相互迭代计算(Transaction的转换),当执行开启后,代表老RDD的消失 RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了。 这个特性可以最大化…...
瑞萨RL78单片机Bootloader实战:手把手教你配置User工程(CS+ for CACX环境)
瑞萨RL78单片机Bootloader实战:CS for CACX环境下的User工程全流程配置 在嵌入式系统开发中,Bootloader的设计与实现往往是项目成功的关键一环。不同于常见的ARM架构单片机,瑞萨RL78系列在Bootloader开发方面的公开资料相对匮乏,这…...
Transformer跳跃连接原理与工程实践详解
1. 跳跃连接在Transformer模型中的核心价值我第一次在Vision Transformer中尝试引入跳跃连接时,准确率直接提升了7个百分点——这个结果让我意识到,这个看似简单的结构远比想象中重要。跳跃连接(Skip Connection)本质上是将神经网…...
当UEBA遇上零信任:实战中如何用行为分析加固你的身份安全防线?
当UEBA遇上零信任:实战中如何用行为分析加固你的身份安全防线? 想象一下,某天凌晨三点,你的财务总监账号突然从境外IP登录,批量下载了所有客户合同。传统安全系统可能只会记录这次登录,而零信任架构下的UEB…...
DownKyi终极指南:5步掌握B站8K超高清视频下载的完整方法
DownKyi终极指南:5步掌握B站8K超高清视频下载的完整方法 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
机器学习训练的环境代价与可持续优化策略
1. 机器学习训练的环境影响现状2013年至2025年间,NVIDIA工作站显卡的运算效率(GFLOPs/W)提升了约100倍,但全球机器学习训练的总能耗却增长了近1000倍。这种看似矛盾的现象揭示了技术进步背后隐藏的环境代价。以典型的1750亿参数语…...
金蝶云星空K3Cloud实战:手把手教你搞定生产退料单WEBAPI自定义(附完整C#代码)
金蝶云星空K3Cloud生产退料单WEBAPI深度开发实战 业务场景与技术挑战 在制造业ERP与MES系统集成过程中,生产退料单的自动化处理一直是企业数字化转型的关键环节。金蝶云星空作为国内领先的ERP解决方案,其标准API接口虽然提供了基础的下推功能,…...
STM32F4定时器HALL模式实战:用CubeMX快速配置无刷电机霍尔传感器(附源码)
STM32F4定时器HALL模式实战:用CubeMX快速配置无刷电机霍尔传感器(附源码) 在工业自动化、机器人控制等领域,无刷电机的精确控制一直是工程师们面临的挑战。传统的手动寄存器配置方式不仅耗时耗力,还容易出错。而STM32C…...
手把手教你用ESP32和ST7735S屏显示图片(MicroPython版,附完整接线与代码)
手把手教你用ESP32和ST7735S屏显示图片(MicroPython版,附完整接线与代码) 第一次拿到ESP32开发板和ST7735S屏幕时,那种既兴奋又忐忑的心情至今记忆犹新。兴奋的是终于可以动手实现硬件项目,忐忑的是面对密密麻麻的引脚…...
从仿真到烧录:Diamond 3.12配合STEP-MXO2小脚丫的完整FPGA实验流程
从仿真到烧录:Diamond 3.12配合STEP-MXO2小脚丫的完整FPGA实验流程 第一次接触FPGA开发时,很多人会被复杂的工具链和硬件配置吓退。但当你用一根普通的安卓数据线将STEP-MXO2开发板连接到电脑,看到自己设计的数字电路在真实硬件上运行时&…...
哪些话,最容易一句话把网络工程师整破防
很多人觉得网络工程师脾气好、话不多、好沟通。 其实不是他们好说话,而是他们见过太多“离谱问题”,已经练出了表面平静的能力。 但有些话,只要你说出口,哪怕是经验再老的网工,内心都会“轻微炸一下”。 今天这篇,就不讲命令、不讲协议,聊点更真实的—— 哪些话,最…...
