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

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过滤器&#xff0c;它是在Servlet2.3规范中定义的&#xff0c;能够对Servlet容器传给Web资源的request对象和response对象执行检查和修改。 Filter不是Servlet&#xff0c;不能直接访问&#xff0c;其本身也不能生成request对象和resp…...

旅游景区公共广播 园区广播 公路服务区广播

旅游景区公共广播 园区广播 公路服务区广播 旅游景区公共广播 旅游景区公共广播(又称背景音乐)简称BGM&#xff0c;它的主要作用是掩盖噪声并创造一种轻松和谐的气氛&#xff0c;是一种创造轻松愉快环境气氛的音乐。掩盖环境噪声&#xff0c;创造与旅游景区相适应的气氛&#…...

Elastic Stack--09--ElasticsearchRestTemplate

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 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】聊天系统消息加密如何做

前言 先介绍一下对称加密算法&#xff0c;在介绍一下加密流程&#xff0c;然后是介绍一下查询加密消息的策略。然后结合现有技术架构然后去选型。 决定采用客户端解密。简而言之就是采用对称服务端加密。然后将加密内容存储到消息表的content字段。然后客户拉取content字段 然…...

网络建设与运维培训介绍和能力介绍

1.开过的发票 3.培训获奖的证书 4合同签署 5.实训设备...

3 种方法限制 K8s Pod 磁盘容量使用

容器在运行期间会产生临时文件、日志。如果没有任何配额机制&#xff0c;则某些容器可能很快将磁盘写满&#xff0c;影响宿主机内核和所有应用。 容器的临时存储&#xff0c;例如 emptyDir&#xff0c;位于目录/var/lib/kubelet/pods 下&#xff1a; /var/lib/kubelet/pods/ …...

05-ESP32-S3-IDF USART

ESP32-S3 IDF USART详解 USART简介 USART是一种串行通信协议&#xff0c;广泛应用于微控制器和计算机之间的通信。USART支持异步和同步模式&#xff0c;因此它可以在没有时钟信号的情况下&#xff08;异步模式&#xff09;或有时钟信号的情况下&#xff08;同步模式&#xff…...

安塔利斯升级php8

1、includes/classes/class.Database.php 255行 multi_query方法加返回类型 :bool query方法加返回类型&#xff1a;: mysqli_result|bool 2、includes/classes/class.Session.php on line 91 Optional parameter $planetID declared before required parameter $dpath is…...

Clickhouse MergeTree 原理(一)

作者&#xff1a;俊达 MergeTree是Clickhouse里最核心的存储引擎。Clickhouse里有一系列以MergeTree为基础的引擎&#xff08;见下图&#xff09;&#xff0c;理解了基础MergeTree&#xff0c;就能理解整个系列的MergeTree引擎的核心原理。 本文对MergeTree的基本原理进行介绍…...

【C语言】字符串函数上

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《C语言》 &#x1f389;道阻且长&#xff0c;行则将至 前言 这篇博客是字符串函数上篇&#xff0c;主要是关于长度不受限制的字符串函数&#xff08;strlen,strcpy,strcat,strcm…...

Java集合基础知识总结(绝对经典)

List接口继承了Collection接口&#xff0c;定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理&#xff0c;还添加了面向位置的操作。 实际上有两种list&#xff1a;一种是基本的ArrayList&#xff0c;其优点在于随机访问元素&#xff0c;另一种是更强大的L…...

Linux:导出环境变量命令export

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Linux中的内建命令export命令用于创建一个环境变量&#xff0c;或将一个普通变量导出为环境变量&#xff0c;并且在这个过程中&#xff0c;可以给该环境变量赋值。 下面…...

案例--某站视频爬取

众所周知&#xff0c;某站的视频是&#xff1a; 由视频和音频分开的。 所以我们进行获取&#xff0c;需要分别获得它的音频和视频数据&#xff0c;然后进行音视频合并。 这么多年了&#xff0c;某站还是老样子&#xff0c;只要加个防盗链就能绕过。&#xff08;防止403&#xf…...

清华把大模型用于城市规划,回龙观和大红门地区成研究对象

引言&#xff1a;参与式城市规划的新篇章 随着城市化的不断推进&#xff0c;传统的城市规划方法面临着越来越多的挑战。这些方法往往需要大量的时间和人力&#xff0c;且严重依赖于经验丰富的城市规划师。为了应对这些挑战&#xff0c;参与式城市规划应运而生&#xff0c;它强…...

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应用分为模型&#xff08;M&#xff09;&#xff0c;控制器&#xff08;C&#xff09;和视图&#xff08;V&#xff09;三层&#xff0c;他们之间以一种插件式的&#xff0c;松耦合的方式连接在一起&#xff0c;模型负责业务对象与数据库…...

VB播放器(动态服务器获取歌词)-183-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword183 VBASP vb动态从服务器读取歌词 VB asp交互 程序, 模式不一样, 与普通的MP3播放器不一样, 这个是可以实现歌词从服务器上查询功能的. 看好了在咨询 我可以給您演示 目  录 前  言 1 1 . 简述 2 1.1 开发…...

java-可变参数

可变参数是什么&#xff1f; 可变参数就是指传入的参数个数是可变的&#xff0c;不是固定的 为什么要可变参数&#xff1f; 当我们要传入大量的形参时&#xff0c;我们就可以用到可变参数了 定义格式 数据类型...变量名; 例如int ...a; 可变参数的细节&#xff1a; &…...

高效批量获取抖音无水印视频:从概念到实战的完整指南

高效批量获取抖音无水印视频&#xff1a;从概念到实战的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

YimMenu安全指南与效率提升:GTA5辅助工具全面应用手册

YimMenu安全指南与效率提升&#xff1a;GTA5辅助工具全面应用手册 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimM…...

TensorFlow的一些基本概念

分类问题和回归问题 在实际生活中&#xff0c;人们面临的问题无非就是离散的和连续的。 比方区分出某个人属于男性还是女性&#xff0c;比方衣服是什么颜色的&#xff0c;什么种类的&#xff0c;这些都是在有限数量的结果中寻找答案&#xff0c;也就是最终结果只能是N个里面的某…...

终极抖音无水印下载指南:如何快速批量获取高质量视频素材

终极抖音无水印下载指南&#xff1a;如何快速批量获取高质量视频素材 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

新手零失败安装eNSP指南:用快马AI生成你的专属安装助手

新手零失败安装eNSP指南&#xff1a;用快马AI生成你的专属安装助手 最近在学习网络技术&#xff0c;第一步就是要安装华为的eNSP模拟器。作为一个纯新手&#xff0c;光是看到各种依赖组件就头大了&#xff1a;WinPcap、VirtualBox、Wireshark...更别提安装过程中可能遇到的各种…...

本地化AI字幕解决方案:Qwen3-ForcedAligner支持多格式音频

本地化AI字幕解决方案&#xff1a;Qwen3-ForcedAligner支持多格式音频 1. 引言&#xff1a;本地化字幕生成的新选择 在视频内容创作和多媒体处理领域&#xff0c;字幕生成一直是个耗时费力的工作。传统手动添加字幕不仅效率低下&#xff0c;时间轴对齐的精度也难以保证。Qwen…...

新手入门实战:通过快马平台为博客系统扩展文章搜索功能

今天想和大家分享一个特别适合新手练手的实战项目——给个人博客系统扩展文章搜索功能。作为一个刚入门开发不久的小白&#xff0c;我最近在InsCode(快马)平台上完成了这个功能扩展&#xff0c;整个过程既学到了东西&#xff0c;又特别有成就感。 功能需求分析 首先需要明确我们…...

个人博客域名迁移说明 www.xiaoming.io

因为之前很多文章和插图都链接到了个人博客&#xff0c;一些读者评论和私信反馈链接有问题&#xff0c;图片不显示&#xff0c;这里特地说明如下&#xff1a;个人博客域名从原先的 www.hainter.com 改成了 www.xiaoming.io。例如文章中有链接 http://www.hainter.com/books 不能…...

类器官 vs 器官芯片:下一代体外模型如何提升药物研发效率【曼博生物-CNBIO】

类器官与器官芯片&#xff08;OOC&#xff09;&#xff1a;临床前研究模型的新趋势 一、介绍 类器官与器官芯片&#xff08;OOC/MPS&#xff09;是当前体外模型研究的两大核心技术路线。:contentReference[oaicite:0]{index0} 类器官是三维微型器官&#xff0c;通常由干细胞…...

从洗衣机到无人机:SVPWM如何让日常电器中的电机更安静、更省电?

从洗衣机到无人机&#xff1a;SVPWM如何让日常电器中的电机更安静、更省电&#xff1f; 当你享受变频空调带来的舒适温度&#xff0c;或是惊叹于无人机平稳的飞行姿态时&#xff0c;可能不会想到这些体验背后都藏着一个关键技术——空间矢量脉宽调制&#xff08;SVPWM&#xff…...