java过滤器Filter相关知识点汇总
1.Filter概述
Servlet Filter又称Servlet过滤器,它是在Servlet2.3规范中定义的,能够对Servlet容器传给Web资源的request对象和response对象执行检查和修改。
Filter不是Servlet,不能直接访问,其本身也不能生成request对象和response对象,只能为web资源提供以下过滤功能:
(1)在web资源被访问前,检查request对象,修改请求头和请求正文,或对请求执行预处理操作。
(2)将请求传递到下一个过滤器或目标资源。
(3)在web资源被访问后,检查response对象,修改响应头和响应正文。
Filter是Servlet规范中最实用的技术,通过其可对服务器管理的所有web资源(jsp,servlet,html等)拦截,从而实现特殊的功能,例如用户权限控制、过滤敏感词、设置统一编码格式等。
注意:过滤器并不是必须要将请求传递到下一个过滤器或目标资源,可自行对请求处理,并发送响应给客户端,也可以将请求转发或重定向到其他web资源。
2.Filter接口
与开发Servlet需要实现javax.servlet.Servlet接口类似,开发过滤器要实现javax.servlet.Filter接口,并提供一个公开的不带参数的构造方法,在Filter接口中,定义了3个方法,如下所示:
(1)init():该方法用于初始化过滤器。
(2)doFilter():该方法完成实际的过滤操作,当客户端请求的URL与过滤器映射的URL匹配时,容器会先调用该方法对请求进行拦截。
(3)destroy():该方法在销毁Filter对象之前被调用,用于释放被Filter对象占用的资源。
3、Filter的工作流程
(1)客户端请求访问容器内的web资源。
(2)Servlet容器接收请求,并针对本次请求分别创建一个request对象和response对象。
(3)请求到达web资源之前,先调用Filter的doFilter()方法,检查request对象,修改请求头和请求正文,或对请求执行预处理操作。
(4)在Filter的doFilter()方法内,调用FilterChain.doFilter()方法,将请求传递给下一个过滤器或目标资源。
(5)目标资源生成响应信息返回客户端之前,处理控制权会再次回到Filter的foFilte()方法,执行FilterChain.doFilter()后的语句,检查response对象,修改响应头和响应正文。
(6)响应信息返回客户端。
4、Filter生命周期(分为3个阶段)
(1)初始化阶段:
Servlet容器负责加载和实例化Filter。容器启动时,读取web.xml或@WebFilter的配置信息加载和实例化所有过滤器。
加载和实例化完成后,Servlet容器调用init()方法初始化Filter实例。在Filter生命周期内,init()方法只执行一次。
(2)拦截和过滤阶段
这个阶段是Filter生命周期中最重要的阶段。当客户端请求访问web资源时,Servlet容器会根据web.xml或@WebFilter的过滤规则执行检查。当客户端请求的URL与过滤器映射匹配时,容器将该请求的request对象以及FilterChain对象以参数的形式传递给Filter的doFilter()方法,并调用该方法请求/响应拦截和过滤。
(3)销毁阶段
Filter对象创建后会驻留在内存中,直到容器关闭或应用被移除时销毁,销毁Filter对象之前,容器会先调用destory()方法,释放过滤器占用的资源。在Filter生命周期内,destory()只执行一次。
5.注册和映射Filter
(1)通过web.xml配置
元素说明:
<filter>用于注册过滤器
<filter-name>是<filter>元素的子元素,用于指定过滤器的注册名,该元素的内容不能为空。
<filter-class>是<filter>元素的子元素,用于指定过滤器的完整限定名(包名+类名)
<init-param>是<filter>元素中的子元素,用于为过滤器指定初始化参数,它的子元素<param-name>指定参数的名称,<param-value>指定参数的值
<filter-mapping>元素用于设置Filter负责拦截的资源。
<filter-name>是<filter-mapping>元素的子元素,用于设置Filter的注册名,该值必须在<filter>元素的子元素<filter-name>中声明过。
<url-pattern>是<filter-mapping>元素的子元素,用于设置Filter拦截的请求路径。
<servlet-name>是<filter-mapping>元素的子元素,用于指定Filter拦截的资源被Servlet容器调用的方式,可以是REQUEST,INCLUDE,FORWAED和ERROR之一。默认情况是REQUEST。用户可以设置多个<dispatcher>子元素指定Filter对资源的多种调用方式进行拦截。
<dispather>元素的取值及意义:
REQUEST:当用户直接访问页面时,容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问,则该过滤器就不会被调用。
INCLUDE:如果目标资源通过RequestDispatcher的include()方法访问,则该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源通过声明式异常处理机制访问,则该过滤器将被调用,除此之外,过滤器不会被调用。
(2)通过@WebFilter注解配置
@WebFilter注解也可配置过滤器,容器在部署应用时,会根据具体属性配置将相应类部署为过滤器。
@WebFilter注解具有下标给出的一些常用属性,但是value,urlPatterns,servletNames三者必须至少包含一个,且value和urlPatterns不能共存,如果同时指定,通常忽略value的取值。

6、过滤器链
在web应用中,可部署多个Filter,若这些Filter都拦截同一目标资源,就组成了一个Filter链,过滤器链中的每个过滤器负责特定操作和任务,客户端请求在各个过滤器减传递,直至传递给目标资源。
FilterChain接口:javax.servlet包中提供了一个FilterChain接口,该接口由容器实现。容器将其实例对象作为参数传入Filter对象的doFilter()方法中。Filter对象可以使用FilterChain对象调用链中下一个Filter的doFilter()方法,若该Filter是链中最后一个过滤器,则调用目标资源的service()方法。FilterChain接口中只有一个方法——doFilter,详细信息如下:

7.Filter链的拦截过程
请求资源时,过滤器链中的过滤器一次对请求处理,并将请求传递给下一个过滤器,直到最后将请求传递给目标资源,发送响应信息时。则按照相反的顺序对相应处理,直到将响应返回给客户端。

注意:过滤器链中的任何一个Filter没有调用FilterChain.doFilter()方法,请求都不会达到目标资源。
8、总结Filter代码编写流程
(1)定义类,实现Filter接口,并重写其所有方法
(2)配置Fiter拦截资源的路径:在类上定义@WebFilter注解或者web.xml文件配置。
(3)在doFilter()方法中设置处理的方法。
具体的代码案例:
<span style="background-color:#f8f8f8"><span style="color:#333333">package Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") //表示拦截所有资源
public class UserSessionFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}
@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("过滤器成功执行!");//放行filterChain.doFilter(servletRequest,servletResponse);
}
@Overridepublic void destroy() {Filter.super.destroy();}
}</span></span>
运行截图:


相关文章:
java过滤器Filter相关知识点汇总
1.Filter概述 Servlet Filter又称Servlet过滤器,它是在Servlet2.3规范中定义的,能够对Servlet容器传给Web资源的request对象和response对象执行检查和修改。 Filter不是Servlet,不能直接访问,其本身也不能生成request对象和resp…...
旅游景区公共广播 园区广播 公路服务区广播
旅游景区公共广播 园区广播 公路服务区广播 旅游景区公共广播 旅游景区公共广播(又称背景音乐)简称BGM,它的主要作用是掩盖噪声并创造一种轻松和谐的气氛,是一种创造轻松愉快环境气氛的音乐。掩盖环境噪声,创造与旅游景区相适应的气氛&#…...
Elastic Stack--09--ElasticsearchRestTemplate
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 spring-data-elasticsearch提供的APIQueryBuildersElasticsearchRestTemplate 方法ElasticsearchRestTemplate ---操作索引 ElasticsearchRestTemplate ---文档操作…...
论坛管理系统|基于Spring Boot+ Mysql+Java+B/S架构的论坛管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能模块 系统功能设计 数据库E-R图设计 l…...
2022 Task 2 Max Sum of 2 integers sharing first and last digits
Task 2 There is an array A consisting of N integers. What’s the maximum sum of two integers from A that share their first and last digits? For example, 1007 and 167 share their first(1) and last(7) digits, whereas 2002 and 55 do not. Write a function: …...
【分布式websocket】聊天系统消息加密如何做
前言 先介绍一下对称加密算法,在介绍一下加密流程,然后是介绍一下查询加密消息的策略。然后结合现有技术架构然后去选型。 决定采用客户端解密。简而言之就是采用对称服务端加密。然后将加密内容存储到消息表的content字段。然后客户拉取content字段 然…...
网络建设与运维培训介绍和能力介绍
1.开过的发票 3.培训获奖的证书 4合同签署 5.实训设备...
3 种方法限制 K8s Pod 磁盘容量使用
容器在运行期间会产生临时文件、日志。如果没有任何配额机制,则某些容器可能很快将磁盘写满,影响宿主机内核和所有应用。 容器的临时存储,例如 emptyDir,位于目录/var/lib/kubelet/pods 下: /var/lib/kubelet/pods/ …...
05-ESP32-S3-IDF USART
ESP32-S3 IDF USART详解 USART简介 USART是一种串行通信协议,广泛应用于微控制器和计算机之间的通信。USART支持异步和同步模式,因此它可以在没有时钟信号的情况下(异步模式)或有时钟信号的情况下(同步模式ÿ…...
安塔利斯升级php8
1、includes/classes/class.Database.php 255行 multi_query方法加返回类型 :bool query方法加返回类型:: mysqli_result|bool 2、includes/classes/class.Session.php on line 91 Optional parameter $planetID declared before required parameter $dpath is…...
Clickhouse MergeTree 原理(一)
作者:俊达 MergeTree是Clickhouse里最核心的存储引擎。Clickhouse里有一系列以MergeTree为基础的引擎(见下图),理解了基础MergeTree,就能理解整个系列的MergeTree引擎的核心原理。 本文对MergeTree的基本原理进行介绍…...
【C语言】字符串函数上
👑个人主页:啊Q闻 🎇收录专栏:《C语言》 🎉道阻且长,行则将至 前言 这篇博客是字符串函数上篇,主要是关于长度不受限制的字符串函数(strlen,strcpy,strcat,strcm…...
Java集合基础知识总结(绝对经典)
List接口继承了Collection接口,定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。 实际上有两种list:一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的L…...
Linux:导出环境变量命令export
相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的内建命令export命令用于创建一个环境变量,或将一个普通变量导出为环境变量,并且在这个过程中,可以给该环境变量赋值。 下面…...
案例--某站视频爬取
众所周知,某站的视频是: 由视频和音频分开的。 所以我们进行获取,需要分别获得它的音频和视频数据,然后进行音视频合并。 这么多年了,某站还是老样子,只要加个防盗链就能绕过。(防止403…...
清华把大模型用于城市规划,回龙观和大红门地区成研究对象
引言:参与式城市规划的新篇章 随着城市化的不断推进,传统的城市规划方法面临着越来越多的挑战。这些方法往往需要大量的时间和人力,且严重依赖于经验丰富的城市规划师。为了应对这些挑战,参与式城市规划应运而生,它强…...
Vue+SpringBoot打造创意工坊双创管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…...
Web框架开发-Django简介
一、MVC和MTV模型 MVC 所谓MVC就是把web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的,松耦合的方式连接在一起,模型负责业务对象与数据库…...
VB播放器(动态服务器获取歌词)-183-(代码+说明)
转载地址: http://www.3q2008.com/soft/search.asp?keyword183 VBASP vb动态从服务器读取歌词 VB asp交互 程序, 模式不一样, 与普通的MP3播放器不一样, 这个是可以实现歌词从服务器上查询功能的. 看好了在咨询 我可以給您演示 目 录 前 言 1 1 . 简述 2 1.1 开发…...
java-可变参数
可变参数是什么? 可变参数就是指传入的参数个数是可变的,不是固定的 为什么要可变参数? 当我们要传入大量的形参时,我们就可以用到可变参数了 定义格式 数据类型...变量名; 例如int ...a; 可变参数的细节: &…...
Lampiao 靶场
Lampiao 靶场完整渗透解析一、靶场环境信息攻击机(Kali)IP:192.168.146.128靶机 IP:192.168.146.129目标:获取靶机 root 权限与 flag二、步骤 1:信息收集(端口与服务扫描)nmap -p- -…...
DeepSeek基准测试避坑手册:92%开发者忽略的4大陷阱——硬件配置偏差、tokenizer不一致、batch size幻觉、温度值污染
更多请点击: https://codechina.net 第一章:DeepSeek基准测试避坑手册:92%开发者忽略的4大陷阱——硬件配置偏差、tokenizer不一致、batch size幻觉、温度值污染 硬件配置偏差:GPU显存与计算精度的隐性干扰 在A100(8…...
基于Arduino的智能蓝调节拍器:DIY音乐练习伴侣
1. 项目概述:一个能“演奏”蓝调的低成本节拍器玩乐器的人,对节拍器这东西又爱又恨。它像一位严厉的监工,用单调的“嘀嗒”声强迫你跟上节奏。但你想过没有,这个监工其实可以很有趣?几年前,我在练习蓝调吉他…...
关联规则挖掘在Calabi-Yau流形Hodge数分析中的应用与复现
1. 项目概述:当数据挖掘遇见高维几何在理论物理和代数几何的交叉领域,Calabi-Yau流形一直扮演着核心角色。这些具有特殊拓扑结构的空间,不仅是弦理论中额外维度紧化的关键候选者,其本身丰富的数学性质也吸引着无数研究者。然而&am…...
Windows Cleaner深度解析:5大核心模块彻底解决系统空间不足问题
Windows Cleaner深度解析:5大核心模块彻底解决系统空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费开源的…...
NHSE终极教程:5分钟掌握动物森友会存档编辑技巧
NHSE终极教程:5分钟掌握动物森友会存档编辑技巧 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦!动物森友会》的收集烦恼吗?想快速打造梦想岛屿却…...
【2026实测】怎么提高论文原创度?盘点8款主流降AI工具,附结构级优化指南
写文章最怕碰到什么,是辛辛苦苦自己码出来的字,却被标了极高的AI值。目前很多文本审核机制对内容的原创度要求极高,纯手写的初稿也可能因为句式太工整被判定为机器生成的。 为了帮几个快被这事折腾疯了的学弟学妹找条出路,我花了…...
观察Token消耗明细,Taotoken用量看板如何帮助控制预算
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Token消耗明细,Taotoken用量看板如何帮助控制预算 对于个人开发者或项目管理者而言,在使用大模型API时…...
收藏干货|2026 版双非零基础入局大模型开发,RAG 与 Agent 就业上岸全攻略
日常总能收到不少初学伙伴的私信,大家普遍都有同一个疑惑:二本及普通院校学历,零基础入门 RAG、Agent 大模型应用开发,究竟能不能顺利入职?行业后续发展前景又如何? 本篇 2026 年全新内容,不空谈…...
Lovable电商网站搭建,为什么92%的初创团队在第3周就遭遇性能雪崩?
更多请点击: https://codechina.net 第一章:Lovable电商网站搭建 Lovable 是一个面向中小商户的轻量级电商解决方案,采用现代 Web 技术栈构建,强调可扩展性、用户体验与快速部署。其核心基于 Vue 3(Composition API&a…...
