过滤器 Filter

目录

1、Filter是什么

2、原理

3、怎样使用

步骤:

Filter的执行流程:

拦截路径配置:

配置方式:

过滤器链:


1、Filter是什么

Filter是一个在计算机中用于筛选、过滤和修改数据的组件或模块。它在数据传输和处理的过程中对数据进行处理或拦截(处理数据流:从输入流中获取数据,对其进行处理后再将其写入输出流中),具有广泛的应用场景。

在Web中,Filter是Java Servlet规范中的一部分,用于拦截客户端请求和服务器响应,并对它们进行处理、过滤和转换。它允许对用户请求进行预处理,也可以对服务器响应进行后处理。可以用于权限控制(根据URL)、统一编码处理、过滤敏感词汇、压缩响应信息等高级功能。

                                                     如图:放行后访问对应资源,资源访问完成后,还会回到Filter中

具体来说,Filter可以在HttpServletRequest到达Servlet之前拦截请求,根据需要检查并修改请求头和数据。同样,在HttpServletResponse到达客户端之前,Filter也可以拦截响应,根据需要检查并修改响应头和数据。通过这种方式,Filter可以执行权限控制、日志记录、请求解码等多种功能。

Filter在其他领域也有应用,如在数据库中对数据进行过滤、在图像处理中对像素进行过滤等。

2、原理

Filter的原理关键在于其拦截和处理数据流的能力。当有数据流经过Filter时,Filter会根据预设的规则对数据进行操作,然后将处理后的数据传递给下一个组件或目标资源。这种机制使得Filter在数据处理和传输过程中起到了关键的作用。

此外,Filter还具有灵活性和可配置性。可以根据具体需求编写自定义的Filter,并在配置文件中指定其应用范围和过滤规则。这使得Filter能够适应各种复杂的应用场景,提高系统的可维护性和可扩展性。

3、怎样使用

步骤:

  1. 定义类,实现 Filter接口,并重写方法
  2. 配置Filter拦截资源的路径 @WebFilter注解   /* 表示拦截所有资源
  3. 在doFilter方法中放行
@WebFilter("/*")
public class FilterDemo implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //添加业务逻辑
        System.out.println("这是FilterDemo");
        //放行
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {
    }
}

Filter的执行流程:

执行放行前逻辑-->放行-->访问资源-->执行放行后逻辑

拦截路径配置:

拦截路径表示 Filter 会对请求的哪些资源进行拦截:@WebFilter("拦截路径") 

配置方式:

拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
目录拦截:/user/*:访问/user下的所有资源,都会被拦截
后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
拦截所有:/*:访问所有资源,都会被拦截

可见,拦截路径的配置方式和 Servlet的请求资源路径配置方式一样,只是表示的含义不同。

过滤器链:

在一个Web应用,可以配置多个过滤器,称为过滤器链。

链式处理:一个请求可以经过多个Filter的处理,每个Filter都可以对请求进行修改或添加额外的信息。可以通过FilterChain对象将请求传递给下一个Filter或目标资源(注解配置Filter的优先级是按照过滤器类名(字符串)的自然排序)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/492558.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python入门题:输入输出练习

以下是Python基础语法的练习,项目要求和代码如下: """ 例3:小精灵:你好,欢迎古灵阁,请问您需要帮助吗?需要or不需要? 你:需要 小精灵:请问你需…

python 中判断文件、目录是否存在的方法

判断目录是否存在并创建目录 一、实现上传文件功能二、判断目录是否存在的办法2.1、使用os模块2.1.1、判断目录是否存在2.1.2、os.makedirs():递归创建目录 2.2、使用pathlib模块2.2.1、path.exist()判断目录是否存在2.2.1、path.mkdir():创建目录 2.3、…

深入聊聊企业数字化转型这个事儿

01 什么是数字化? 聊数字化,就不得不聊聊信息化、智能化。佛性的说:信息化是数字化的前世,智能化是数字化的来生!我习惯用一个结构化的图形来表示事物之间的关系,信息化、数字化、智能化的关系如下&#…

后端基础篇- 社区 IDEA 手动 Maven 创建 SpringBoot 项目、Maven 安装与配置环境变量、IDEA 集成 Maven

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Maven 安装与配置环境变量 1.1 下载并解压安装包 1.2 配置本地仓库 1.3 配置阿里云私服 1.4 配置环境变量 2.0 IDEA 集成 Maven 2.1 首先创建一个新项目 2.2 开始…

Unity编辑器功能 将选中的文件夹复制一份到其他文件夹

[MenuItem("Ab包工具/将选中的文件移动到StreamingAssets文件夹下")] public static void MoveFireToStreamA() { //得到选中文件的数组 Object[] selectobj Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets); i…

【数据结构初阶】之堆(C语言实现)

数据结构初阶之堆(C语言实现) 🌏 堆的概念🌏 堆的模拟实现🐓 堆的结构和方法接口🐓 堆的方法的模拟实现🙊 堆的初始化🙊 堆的构建🙊 堆的插入🙊 向上调整&…

sentinel热点参数流控

1、概念 热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。 2、示例 2.1、目的 对于如下的/get接口的参…

【正点原子FreeRTOS学习笔记】————(13)队列集

这里写目录标题 一、队列集简介(了解)二、队列集相关API函数介绍(熟悉)三、队列集操作实验(掌握) 一、队列集简介(了解) 一个队列只允许任务间传递的消息为同一种数据类型&#xff…

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 : https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上,扩展了声明式UI开发范式和状态管理,提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

centos7 linux下yum安装redis

安装redis 1.检查是否有redis yum 源 yum install redis2.下载fedora的epel仓库 yum install epel-release3.安装redis数据库 yum install redis4.安装完毕后,使用下面的命令启动redis服务 # 启动redis service redis start# 停止redis service redis stop# 查…

UOS、Linux下的redis的详细部署流程(适用于内网)

提示:适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

精酿啤酒屋:畅饮与文化的交汇点

在城市的繁华之中,Fendi Club啤酒屋犹如一颗璀璨的明珠,吸引着无数寻求文化与享受的人们。它不仅仅是一个提供美酒佳肴的地方,更是一个文化和社交的交汇点。 走进Fendi Club,你会被它与众不同的环境所吸引。暗色调的装饰风格&…

Python机器学习赋能GIS:地质灾害风险评价的新方法论

地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下,地质灾害在世界范围内频繁发生。我国除滑坡灾害外,还包括崩塌、泥石流、地面沉…

NO11 蓝桥杯单片机之DS18B20数字温度计

DS18B20数字温度计这个模块和以往单片机学习的模块可能不同,这里还要知道其头文件(.h)和.c文件代码的理解。 具体这个温度计是怎么实现检测温度的,呃呃呃呃呃这可能就要去查阅专业资料,涉及的知识体系应该很庞大&…

ABNDP: Co-optimizing Data Access and Load Balance in Near-Data Processing——论文泛读

ASPLOS 2023 Paper 论文阅读笔记整理 问题 近数据处理(NDP)是一种很有前途的体系结构范式,可以解决数据密集型应用程序的内存墙挑战。基于3D堆叠存储器的典型NDP系统包含大量并行处理单元,每个并行处理单元都可以访问其本地存储…

YOLOv9改进策略:block优化 | SEAM提升小目标遮挡物性能

💡💡💡本文改进内容:SEAM提升小目标遮挡物性能,在多个数据集得到很好的验证 改进结构图如下: YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️…

Github实现push触发自动构建(包括提交代码到另一个仓库中和发布npm)

将指定内容自动更新到另一个代码仓库中 登录https://github.com,创建Personal access token: (1)github右上角,点击头像,进入Settings > Developer settings > Personal access tokens 下面的Tokens …

一名00后程序员初次使用低代码开发平台的感受

前言 大家好,我是小代,一名00后的Java后端开发工程师。我热爱编程,希望通过写博客来分享我的学习经验和心得。最近,我加入了一家专注于低代码开发平台的公司,这里的技术挑战和新颖性让我决定开始我的博客之旅。 工作…

3.1 SQL概述

SQL(Structured Query Language) 结构化查询语言,是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 功能:查询,数据库模式创建,数据库数据的插入与修改,数据库完整性、安全…

影响欧美货币对因素?fpmarkets提醒如何避免陷阱

欧元兑美元汇率不仅取决于美国经济数据,还取决于欧洲央行的报告。 美国经济数据不仅包括美联储利率和美国就业报告,还有美国石油储备、汽油储备和页岩油钻井平台数量的报告。fpmarkets发现更谨慎的投资者还会分析失业数据、平均时薪变化这些更细致的数据…