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

过滤器(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)

过滤器&#xff08;Filter&#xff09; 1. 基本概念 过滤器&#xff08;Filter&#xff09;是拦截 Request 请求的对象&#xff1a;在用户的请求访问资源前处理 ServletRequest 和 ServletResponse 。 Filter 相关的接口有&#xff1a;Filter、FilterConfig、FilterChain 。…...

AMRT3D数字孪生引擎详解

AMRT 3D数字孪生引擎介绍 AMRT3D引擎是一款融合了眸瑞科技的AMRT格式与轻量化处理技术为基础&#xff0c;以降本增效为目标&#xff0c;支持多端发布的一站式纯国产自研的CS架构项目开发引擎。 引擎包括场景搭建、UI拼搭、零代码交互事件、光影特效组件、GIS/BIM组件、实时数据…...

Sqlite数据库详解

1.关于Sqlite SQLite 是一个进程内库&#xff0c;它实现了一个独立的、无服务器的、零配置的事务性 SQL 数据库引擎。 SQLite的代码属于公共领域&#xff0c;因此对 用于任何目的&#xff0c;商业或私人目的。 SQLite是世界上部署最广泛的数据库 应用程序比我们能做的要多 计数…...

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225头盔 获取完整源码源文件已标注的数据集&#xff08;1463张&#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通&#xff0c;有偿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树&#xff0c;红黑树&#xff0c;哈希表等&#xff0c;但这是在内存…...

常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好

PFA容量瓶规格参考&#xff1a;10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验&#xff0c;也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…...

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理

k8s集群的三种接口 k8s集群有三大接口&#xff1a; CRI&#xff1a;容器进行时接口&#xff0c;连接容器引擎--docker、containerd、cri-o、podman CNI&#xff1a;容器网络接口&#xff0c;用于连接网络插件如&#xff1a;flannel、calico、cilium CSI&#xff1a;容器存储…...

Pycharm一直打不开,无任何报错

我windows安装了pycharm一直打不开(无论专业版还是社区版都打不开)&#xff0c;无任何弹窗&#xff0c;无任何报错 最后解决问题&#xff1a; 查看环境变量PYCHARM_VM_OPTIONS 发现有一个环境变量PYCHARM_VM_OPTIONS 删除PYCHARM_VM_OPTIONS这个环境变量&#xff0c;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中如何取交集并集和差集

交集 要获取两个表的交集&#xff0c;你可以使用INNER JOIN或者JOIN&#xff1a; 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资源配置清单文件模板&#xff1f; 关于配置清单常见的字段 方案一&#xff1a;手写yaml配置文件 …...

8.openEuler操作系统网络管理和防火墙(二)

openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议安装麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 3.通过IP命令配置网络 配置IP地址: 使用ip命令为接口配置地址,命令格式如下,其中 interface-name 为网卡名…...

1904_ARM Cortex M系列芯片特性小结

1904_ARM Cortex M系列芯片特性小结 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) ARM Cortex M系列的MCU用过好几款了&#xff0c;也涉及到了不同的内核。不过&#xff0c;关于这些内核的基本的特性还是有些不了解。从ARM的官方网站上找来了一个对比…...

热闹元宵进行中,如何利用VR全景展示民宿品牌形象?

错峰出游闹元宵&#xff0c;元宵节恰逢周末&#xff0c;而且还是春节假期返工之后的首个休息日&#xff0c;不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”&#xff0c;那么如何知道特价酒店服务好不好呢&#xff1f;先别…...

css3实现无缝滚动,鼠标经过暂停

js也可以实现&#xff0c;但css3更加的平滑和资源占用更少。下面是具体代码&#xff0c;动画要单独用一个类名&#xff0c;否则暂停估计不会生效&#xff1a; 原理&#xff1a;动画向上移动&#xff0c;目标完全消失后&#xff0c;从头开始&#xff0c;注意 动画移动高度是文本…...

SpringCache缓存专题

SpringCache缓存专题 学习目标 1、理解缓存存在的意义 2、掌握redis与SpringCache的集成方式 3、掌握SpringCache注解的使用 4、掌握项目集成SpringCache流程 第一章 基于SpringCache缓存方案 1.为什么需要缓存 ​ 前台请求&#xff0c;后台先从缓存中取数据&#xff0…...

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之间进行相互迭代计算&#xff08;Transaction的转换&#xff09;&#xff0c;当执行开启后&#xff0c;代表老RDD的消失 RDD的数据是过程数据&#xff0c;只在处理的过程中存在&#xff0c;一旦处理完成&#xff0c;就不见了。 这个特性可以最大化…...

人工智能核心技术解析与行业应用实践

1. 人工智能发展现状与行业影响过去五年间&#xff0c;人工智能技术已经从实验室走向规模化商业应用。根据行业调研数据显示&#xff0c;全球AI市场规模年复合增长率保持在28%左右&#xff0c;其中计算机视觉和自然语言处理技术占据主要市场份额。在实际落地层面&#xff0c;AI…...

Vue Antd Admin深度解析:如何用Vue2+Ant Design构建企业级后台管理系统的终极方案

Vue Antd Admin深度解析&#xff1a;如何用Vue2Ant Design构建企业级后台管理系统的终极方案 【免费下载链接】vue-antd-admin &#x1f41c; Ant Design Pros implementation with Vue 项目地址: https://gitcode.com/gh_mirrors/vu/vue-antd-admin 你是否曾为构建企业…...

2026最权威的五大AI辅助论文助手解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能生成内容越发普遍的大环境之中&#xff0c;AIGC检测系统被大量地用于识别机器写作…...

M2LOrder模型联邦学习初探:在保护隐私下的多中心情感模型训练

M2LOrder模型联邦学习初探&#xff1a;在保护隐私下的多中心情感模型训练 想象一下&#xff0c;几家医院都想提升对患者反馈的分析能力&#xff0c;但谁也无法把自己的数据交给别人。数据是核心资产&#xff0c;也是敏感隐私&#xff0c;这个矛盾怎么破&#xff1f;今天我们就…...

ChemCrow化学智能工具:3步快速掌握AI化学研究助手

ChemCrow化学智能工具&#xff1a;3步快速掌握AI化学研究助手 【免费下载链接】chemcrow-public Chemcrow 项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public ChemCrow是一个基于Langchain构建的开源化学智能工具包&#xff0c;专为化学研究人员和爱好者设计…...

深度解析MPC-HC:开源媒体播放器的技术架构与性能优化策略

深度解析MPC-HC&#xff1a;开源媒体播放器的技术架构与性能优化策略 【免费下载链接】mpc-hc MPC-HCs main repository. For support use our Trac: https://trac.mpc-hc.org/ 项目地址: https://gitcode.com/gh_mirrors/mpc/mpc-hc 在多媒体播放领域&#xff0c;Windo…...

Android12 展锐sl8541平台USB转串口驱动集成与SELinux权限实战解析

1. 硬件电路与引脚配置 在展锐sl8541平台上集成USB转串口功能&#xff0c;第一步需要确保硬件电路设计正确。Type-C接口的ID引脚连接到了CPU的KEYIN2/EXTINT4/GPIO126引脚&#xff0c;这个引脚的状态决定了USB的工作模式&#xff08;主机模式或设备模式&#xff09;。实际项目中…...

Vue3-Marquee:现代前端开发中的流动艺术

Vue3-Marquee&#xff1a;现代前端开发中的流动艺术 【免费下载链接】vue3-marquee A simple marquee component with ZERO dependencies for Vue 3. 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-marquee 在数字界面的海洋中&#xff0c;信息如潮水般涌动。我们曾…...

Linux 0.11 源码探秘:为什么现代Linux抛弃了TSS进程切换?

Linux进程切换机制演进&#xff1a;从TSS到现代堆栈设计的深度解析 引言&#xff1a;一段被遗忘的内核设计史 1991年诞生的Linux 0.11版本采用了一种如今看来颇为"古典"的进程切换方式——基于TSS&#xff08;Task State Segment&#xff09;的硬件辅助切换。这种设计…...

如何高效提取SWF资源:JPEXS Free Flash Decompiler终极指南

如何高效提取SWF资源&#xff1a;JPEXS Free Flash Decompiler终极指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 还在为无法从SWF文件中提取图像和音频而烦恼吗&#xff1f;面对那…...