过滤器(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的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了。 这个特性可以最大化…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
