JavaWeb-Filter过滤器

目录
Filter过滤器
1. Filter的生命周期
2.Filter的配置
3.拦截路径
4.拦截具体的使用
5.拦截方式配置(资源被访问方式)
6.FilterChain拦截链
Filter过滤器
filter是过滤器,相比于Servlet的发送请求,filter是用于拦截请求。比如在登陆系统中,正常登陆的用户可以访问服务器的相关资源,而如果登陆信息错误,则拦截想要访问资源的请求。以下将具体介绍filter
1. Filter的生命周期
Filter的生命周期分为三部分,分别是init()初始化;doFilter()执行拦截;destroy()销毁;
具体如下代码
package com.company.Filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//注解配置实现所有请求访问都进行拦截
@WebFilter("/*")
public class filterDemo1 implements Filter {
// 初始化@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("加载的时候自动执行,并且只执行一次");}
// 执行拦截@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("实现拦截的时候执行函数,可以多次执行");}
// 销毁@Overridepublic void destroy() {System.out.println("在服务器关闭的时候,执行销毁函数");}
}
2.Filter的配置
Filter的配置分为两种,一种是xml配置,一种是通过注解类配置
- 通过xml配置(打开web.xml):
<filter>
<!-- 随便创建想要的名称--><filter-name>filterDemo1</filter-name>
<!-- filter对应的具体类--><filter-class>com.company.Filter.filterDemo1</filter-class></filter>
<!-- 创建filter对应的映射--><filter-mapping>
<!-- filter对应的名称--><filter-name>filterDemo1</filter-name>
<!-- 拦截路径,/*表示所有访问都会进行拦截--><url-pattern>/*</url-pattern></filter-mapping>
- 通过注解类进行配置:
@WebFilter(value=url-pattern)
如果只需要写拦截规路径可以省略掉value = ;
直接输入@WebFilter("/*")实现对数据所有访问时候进行拦截
3.拦截路径
刚才介绍了/*是所有请求的拦截,但是对于具体访问的请求的拦截还无法做到,下面介绍其他拦截路径
- 具体路径访问的拦截:/index.jsp (当访问index.jsp文件时候实现拦截)
- 某一个目录的访问的拦截:/user (当访问user目录以下的所有文件时候进行拦截)
- 后缀名访问的拦截:*.jsp (实现对所有文件以.jsp后缀结尾访问的拦截)
- 拦截所有相关路径:/* (访问所有服务器的资源时候都实现拦截)
4.拦截具体的使用
1.创建类实现Filter接口(注意Filter接口是包javax.servlet中的)
2.覆写生命周期函数
3.通过doFilter函数实现拦截。当通过后实现放行
案例代码:
拦截类
package com.company.Filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//通过注解类实现拦截路径
@WebFilter("/*")
//实现接口
public class filterDemo2 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器已被加载");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("发现请求,实施拦截");进行验证,如果通过则实现放行
// System.out.println("验证成功,放行");
// filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {System.out.println("服务器关闭时候执行销毁函数");}
}
模拟资源类
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/FilterDemo3")
public class FilterDemo3 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("访问到资源啦");}
// 方法统一@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}
当通过url访问资源类时候 可以看到请求被拦截了,无法执行资源类中输出"访问资源类啦"

再加上验证功能后如果允许通过则需要放行,执行FilterChain filterChain中filterChain对象的doFilter(servletRequest对象, servletResponse对象)即代码中的
// 拦截结束后如果通过则实现放行System.out.println("验证成功,放行");filterChain.doFilter(servletRequest, servletResponse);
此时再通过url访问后,查看控制台的信息可以看到:

5.拦截方式配置(资源被访问方式)
当然除了路径访问可以拦截以外,还可以设置拦截的方式,有些请求可以直接输入url直接访问类。有些通过一些网页实现跳转的方式获取类的资源。还有就是通过请求转发的形式获取类。所以基于如此可以对这些方法做一些限制。
| 拦截方法 | 描述 |
|---|---|
| REQUEST(请求拦截) | 拦截直接通过 URL 访问的请求。 |
| FOWARD(转发拦截) | 拦截通过请求转发方式获取资源的请求。 |
| INCLUDE(包含拦截) | 拦截通过网页跳转方式获取资源的请求。 |
| ERROR(错误拦截) | 拦截发生错误或异常情况的请求。 |
| ASYNC(异步拦截) | 拦截异步请求,即延迟加载的请求,可以防止对响应进行预先缓存和使用。 |
默认情况下是通过REQUEST实现拦截
具体使用还需要看开始时候使用的配置
- 通过xml配置
<filter><filter-name>filterDemo1</filter-name><filter-class>com.company.Filter.filterDemo1</filter-class></filter><filter-mapping><filter-name>filterDemo1</filter-name><url-pattern>/*</url-pattern>
<!-- 配置请求拦截方法--><dispatcher>REQUEST</dispatcher></filter-mapping>
- 通过注解类配置

6.FilterChain拦截链
拦截链,顾名思义就是由多个过滤器组成,就像是一条路设置了多个收费站一样。只有满足所有的拦截规则后才能通过。
设置多个拦截器(其中一个的代码)
package com.company.Filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class filterDemo3 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("拦截器1进行拦截");System.out.println("拦截器1放行");
// 拦截器放行filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}
}
通过url访问时候结果如下

拦截器的顺序
一.注解配置
是通过拦截器名字的排序比如01、02、03,先比较第一个数字大小,如果相同就比较第二个数字大小以此类推
二.xml配置
只需要配置xml时候由上往下即可
相关文章:
JavaWeb-Filter过滤器
目录 Filter过滤器 1. Filter的生命周期 2.Filter的配置 3.拦截路径 4.拦截具体的使用 5.拦截方式配置(资源被访问方式) 6.FilterChain拦截链 Filter过滤器 filter是过滤器,相比于Servlet的发送请求,filter是用于拦截请求。…...
python如何实现1ms内触发两个接口请求
在Python中,可以通过多线程或者协程来实现1ms内触发两个接口请求。以下是两种方法的示例代码: 1.多线程实现: import threading import requestsdef send_request(url):response requests.get(url)print(response.text)# 创建两个线程&…...
深入解析路由与网络:网络的脉络
目录 路由 广域网 公网 外网 局域网 内网 以太网 Wi-Fi CDN IPv4和IPv6 IP地址分类 无类别域间路由(CIDR) 路由 路由是指在计算机网络中,将数据包从源地址传递到目标地址的过程。在一个复杂的网络中,数据包需要经过多…...
spring.HttpMessageNotReadableException: JSON parse error
实体类如下: Value public class Search{//搜索内容String value;//是否模糊搜索boolean fuzzy true; //其实这样写并不是“默认”模糊搜索,而是“一定是”模糊搜索 }spring.HttpMessageNotReadableException: JSON parse error: Cannot construct ins…...
安全中间件的设计思路和简单实践
rasp 的侵入式特性和拦截特性导致开发和运维普通不太愿意配合,当生产环境出现问题时往往第一时间先把责任推给 rasp,逐渐的安全部门普遍只能把 rasp 设置为告警模式,而且越是大的集群拦截开的就越少,所以字节的 elkeid 和某外卖大…...
试卷扫描成电子版方法分享,这个方法不要错过
很多时候,为了方便传输我们需要将试卷扫描成电子版进行存档,以备不时之需。很多小伙伴如果遇到试卷需要扫描转成电子版可能就不知道该如何操作了,其实试卷扫描是一项非常重要的工作,因此需要注意一些方法和细节。以下是试卷扫描成…...
【PostgreSQL的CLOG解析】
同样还是这张图,之前发过shared_buffer和os cache、wal buffer和work mem的文章,今天的主题是图中的clog,即 commit log,PostgreSQL10之前放在数据库目录的pg_clog下面。PostgreSQL10之后修更名为xact,数据目录变更为pg_xact下面&…...
腾讯云国际站代充-阿里云ECS怎么一键迁移到腾讯云cvm?
今天主要来介绍一下如何通过阿里云国际ECS控制台一键迁移至腾讯云国际CVM。腾讯云国际站云服务器CVM提供全面广泛的服务内容。无-需-绑-定PayPal,代-充-值腾讯云国际站、阿里云国际站、AWS亚马逊云、GCP谷歌云,官方授权经销商!靠谱࿰…...
东方晶源亮相第十一届半导体设备年会,共话发展“芯”机遇
8月11日,以“协力同芯抢机遇,集成创新造设备”为主题的第十一届(2023年)中国电子专用设备工业协会半导体设备年会暨产业链合作论坛(CSEAC)在无锡太湖国际博览中心圆满闭幕。为期3天的CSEAC,通过…...
git修改历史commit信息
修改历史提交 commit 的信息 操作步骤: git rebase -i 列出 commit 列表找到需要修改的 commit 记录,把 pick 修改为 edit 或 e,:wq 保存退出修改 commit 的具体信息git commit --amend,保存并继续下一条git 4. 4. rebase --cont…...
基于K8S环境部署Dolphinscheduler及简单应用
一、Dolphinscheduler简介 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用…...
Linux的ln命令
ln是link的缩写,在Linux中 ln 命令的功能是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录࿰…...
深入了解Bear Necessities Hackathon黑客松的优胜者们
生态系统中的资深建设者皆知道Moonbeam是大型黑客松狂热爱好者,不论是线上虚拟的还是现场的。然而,很少有黑客松能达到Moonbeam和AWS举办的Bear Necessities黑客松这样的规模和吸引力。本次黑客松共有755人参与,共提交了62份参赛作品。其中22…...
mysql-tokudb使用qa
一、使用前提 安装tokudb引擎的前提条件是物理机要关闭大页,并需要注意物理机所剩内存和配置文件中tokudb_cache_size(内存主要占用部分),innodb_buffer_pool_size的使用,另外tokudb的安装一定要安装libjemalloc依赖&…...
对比学习论文综述总结
第一阶段:百花齐放(18-19中) 有InstDisc(Instance Discrimination)、CPC、CMC代表工作。在这个阶段方法模型都还没有统一,目标函数也没有统一,代理任务也没有统一,所以说是一个百花齐放的时代 1 判别式代理任务---个体判别任务 1.1 Inst Dict---一个编码器+一个memory…...
【BASH】回顾与知识点梳理(二十三)
【BASH】回顾与知识点梳理 二十三 二十三. Linux 账号管理(二)23.1 账号管理新增与移除使用者: useradd, 相关配置文件, passwd, usermod, userdelusermoduserdel 23.2 用户功能(普通用户可使用)idfingerchfnchsh 23.3…...
用 Python 写一个 NoSQL 数据库
NoSQL 这个词在近些年正变得随处可见. 但是到底 “NoSQL” 指的是什么? 它是如何并且为什么这么有用? 在本文, 我们将会通过纯 Python (我比较喜欢叫它, “轻结构化的伪代码”) 写一个 NoSQL 数据库来回答这些问题. OldSQL 很多情况下, SQL 已经成为 “数据库” (database)…...
Spring Security自定义登陆界面和密码验证逻辑
maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> 创建配置文件处理跳转拦截等功能以及密码比对功能 package com.example.demo2.demos.web1;…...
Android布局【LinearLayout】
文章目录 常见属性orientation的选择项解释项目结构主要代码 常见属性 orientation:布局中组件的排列方式gravity:控制组件所包含的子元素的对齐方式,可多个组合layout_gravity:控制该组件在父容器里的对齐方式background&#x…...
搭建grafana+loki+promtail日志收集系统
准备工作 下载地址 https://github.com/grafana/loki/releases 安装包放在服务器目录:/opt wget https://github.com/grafana/loki/releases/download/v2.4.2/loki-linux-amd64.zip wget https://github.com/grafana/loki/releases/download/v2.4.2/promtail-lin…...
C语言指针核心概念与安全实践指南
1. 指针变量基础概念解析指针是C语言中最强大也最容易让人困惑的特性之一。理解指针的关键在于区分指针变量本身和它所指向的内存空间。让我们从一个简单的例子开始:int a 42; int *ptr &a;这里,ptr是一个指针变量,它存储的是变量a的地…...
华为ENSP OSPF实验避坑指南:配置Stub区域、路由聚合与DR选举的常见错误
华为ENSP OSPF实验避坑指南:配置Stub区域、路由聚合与DR选举的常见错误 在华为ENSP模拟环境中进行OSPF多区域配置时,即使是经验丰富的网络工程师也难免会遇到各种"坑"。本文将从实际排错角度出发,深入剖析Stub区域配置、路由聚合计…...
Python+AI:自动分析财报数据的5个实战技巧
总共28小时,整整3天半! 而且这还只是季报,如果是年报更厚。更崩溃的是,有些公司财报格式不统一,找数据像大海捞针。 我当时的想法是:这活儿能不能自动化? 一、解决方案:PythonAI自动…...
Ray框架实战:分布式AI训练中的动态资源调度与性能优化
1. Ray框架与分布式AI训练基础 第一次接触Ray框架是在处理一个图像分类项目时,当时我们的ResNet模型在单台8卡服务器上训练需要整整一周。同事建议试试Ray,结果同样的任务在16台机器上只用了6小时——这种效率提升让我彻底成为了Ray的拥趸。Ray本质上是…...
2025届必备的五大降AI率神器实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能生成文本普及起来后,各种各样的AI检测系统被创造出来,为了应…...
高效全方位网页资源捕获方案:猫抓扩展技术解析与应用指南
高效全方位网页资源捕获方案:猫抓扩展技术解析与应用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 引言:网页资源获取…...
SwitchButton自定义样式完全教程:从基础到高级的完整指南
SwitchButton自定义样式完全教程:从基础到高级的完整指南 【免费下载链接】SwitchButton SwitchButton.An beautifullightweightcustom-style-easy switch widget for Android,minSdkVersion > 11 项目地址: https://gitcode.com/gh_mirrors/swi/SwitchButton …...
从隔离菜谱到通用烹饪指南:Cook用户体验设计的完整演进之路
从隔离菜谱到通用烹饪指南:Cook用户体验设计的完整演进之路 【免费下载链接】cook 🍲 好的,今天我们来做菜!OK, Lets Cook! 项目地址: https://gitcode.com/gh_mirrors/co/cook 在数字化时代,烹饪应用已成为厨房…...
在快马平台快速构建hevc视频转码原型:三步生成可运行demo
今天想和大家分享一个在InsCode(快马)平台上快速搭建HEVC视频转码原型的经历。作为一个经常需要处理视频内容的开发者,我发现这个平台特别适合用来做技术验证和原型开发。 为什么选择HEVC视频扩展 HEVC(高效视频编码)相比传统的H.264能节省…...
提升开发效率的超能力:Superpowers 开源项目介绍
Superpowers:软件开发的超级武器 在软件开发的世界中,如何高效地将想法转化为可工作的代码一直是开发者们的重要追求。今天我们要介绍的开源项目——Superpowers,正是为了实现这一目标而生。它是一个完整的软件开发工作流,旨在帮…...
