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

Javaweb11-Filter过滤器

Filter过滤器

1.Filter的基本概念:

在Java Servlet中,Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。

image-20240711150656881

2.Filter常见的API

  • Filter接口
方法声明功能描述
void init(FilterConfig config)init( )方法是 Filter 的初始化方法,创建 Filter 实例后将调用 init( )方法。该方法的参数filterConfig 用于读取 Filter 的初始化参数(只执行一次)
void doFilter (ServletRequest req,ServletResponse resp,FilterChain cahin)doFilter()方法用于完成实际的过滤操作,当客户的请求满足过滤规则时,Servlet容器将调用过滤器的 doFiter()方法完成实际的过滤操作。doFilter( )方法有多个参数,其中,参数request和response为Web 服务器或 Filter 链中的上一个 Filter 传递过来的请求和响应对象;参数 chain 代表当前 Filter 链的对象
void destroy()该方法用于释放被 Filter 对象打开的资源,例如关闭数据库和IO 流。destroy( )方法在Web 服务器释放 Filter 对象之前被调
  • FilterConfig接口

用于封装Filter的配置信息

image-20240711151637969

  • FilterChain接口
FilterChain接口中的doFilter(ServletRequest req,ServletResponse resp)方法用来调用Filter链中下一个过滤器,如果没有过滤器调用下一个处理程序

3.Filter生命周期

init():在服务器启动之后,会创建Filter对象,调用init方法,加载配置
doFilter():每一次请求被拦截资源时会执行,执行多次
destroy():在服务器关闭后,Filter对象会被销毁,通过调用一次destroy销毁

4.Filter的配置

实现过滤器

  • @WebFilter注解

image-20240711154056819

注意:urlPatterns和value中是要过滤的url

拦截路径

1.具体资源路径:/index.jsp
2.拦截目录:/book/*
3.后缀名拦截:*.jsp
4.拦截所有资源:/*

拦截不同方式的请求

@WebFiler 注解有一个特殊的属性 dispatcherTypes,它可以指定过滤器的转发模式。dispatcherTypes属性有4个常用值,具体如下

(1)REQUEST
过滤器设置 dispatcherTypes 属性值为 REQUEST 时,如果用户通过 RequestDispatcher 对象的 include()方法或forward()方法访问目标资源,那么过滤器不会被调用。除此之外,该过滤器会被调用。
(2)INCLUDE
过滤器设置 dispatcherTypes 属性值为 INCLUDE 时,如果用户通过 RequestDispatcher 对象的 include()方法访问目标资源,那么过滤器将被调用。除此之外,该过滤器不会被调用。
(3)FORWARD
过滤器设置 dispatcherTypes 属性值为 FORWARD,如果通过 RequestDispatcher 对象的 forward()方法访问目标资源,那么过滤器将被调用。除此之外,该过滤器不会被调用。
(4)ERROR
过滤器设置 dispatcherTypes 属性值为 ERROR 时,如果通过声明式异常处理机制调用目标资源,那么过滤器将被调用。除此之外,过滤器不会被调用。
  • 在web.xml中配置
<filter><filter-name>filter01</filter-name><filter-class>com.tyut.controller.FilterText01</filter-class>
</filter><filter-mapping><filter-name>filter01</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

5.过滤器链

  • 执行顺序

如果有两个过滤器:过滤器1和过滤器2,执行顺序应为

过滤器1 -> 过滤器2 -> 资源执行 -> 过滤器2 -> 过滤器1
  • 过滤器先后顺序
1.注解配置:按照过滤器名字(filterName)的字符串比较规则比较,值小的先执行(ps:filter01比filter02先执行)
2.web.xml配置:<filter-mapping></filter-mapping>谁定义在上边,谁先执行

6.案例一:实现登录验证

实现了一个简单的登录过滤器,用于拦截所有请求并检查用户是否已登录。如果用户未登录,则会将请求重定向到登录页面;如果用户已登录,则允许访问其他页面或资源。这种过滤器在Web应用中常用于确保特定页面或功能只能被授权的用户访问,提高系统的安全性和用户体验。

package com.tyut;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebFilter({"/*"})
public class LoginFilter implements Filter {public void init(FilterConfig config) throws ServletException {}public void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {//1.将request转换HttpServletRequestHttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;//2.判断是否是有关登录的信息String requestURI = req.getRequestURI();//如果是有关登录的页面,可以访问if (requestURI.contains("/login.jsp") || requestURI.contains("/LoginServlet") || requestURI.contains("/login.css")) {chain.doFilter(req, resp);} else {//必须登录以后才可以访问到其他页面//3.判断用户是否存在HttpSession session = req.getSession();if (session.getAttribute("user") != null) {//用户存在chain.doFilter(request, response);//放行} else {req.getRequestDispatcher("/login.jsp").forward(req, resp);}}}
}

相关文章:

Javaweb11-Filter过滤器

Filter过滤器 1.Filter的基本概念&#xff1a; 在Java Servlet中&#xff0c;Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...

【AI-7】CUDA

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA公司开发的一种并行计算平台和编程模型&#xff0c;使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍&#xff1a; CUDA的特点 并行计算&#xff1a;CUDA允许开发…...

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染&#xff0c;一个是 png&#xff0c;一个是 jpg 目录 1、web164 2、web165 二次渲染&#xff1a; 网站服务器会对上传的图片进行二次处理&#xff0c;对文件内容进行替换更新&#xff0c;根据原有图片生成一个新的图片&#xff0c;这样…...

基于实现Runnable接口的java多线程

Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行&#xff0c;以及应用场景。 一、应用场景 异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。 以下…...

如何在uniapp中使用websocket?

websocket是我们经常使用到的接口,通常用于即时通讯以及K线图这种需要实时更新数据的业务需求上,传统的restful接口虽然可以满足,但是你需要轮询,这就要额外写一堆代码,不是很方便,用websocket就简单很多,我们来看代码 第一步定义全局常量、变量 const config = {host…...

PCL 点云PFH特征描述子

点云PFH特征描述子 一、概述1.1 概念1.2 算法原理二、代码实现三、结果示例一、概述 1.1 概念 点特征直方图PFH(Point Feature Histograms)描述子:用于表示点云中每个点的局部几何形状信息,它是一种直方图描述子,包括了点云的法线方向和曲率信息,PFH描述子可以帮助区分不同…...

linux程序安装-编译-rpm-yum

编译安装流程步骤详解 识途老码 | Linux编译安装程序 编译安装概览 编译安装是从软件的源代码构建到最终安装的过程,它允许用户根据自身的需求和系统的环境来自定义软件的配置和功能。相对于二进制安装,编译安装提供了更高的灵活性和控制能力,但同时也要求用户具备一定的…...

【网络协议】PIM

PIM 1 基本概念 PIM&#xff08;Protocol Independent Multicast&#xff09;协议&#xff0c;即协议无关组播协议&#xff0c;是一种组播路由协议&#xff0c;其特点是不依赖于某一特定的单播路由协议&#xff0c;而是可以利用任意单播路由协议建立的单播路由表完成RPF&…...

Redis 中的跳跃表(Skiplist)基本介绍

Redis 中的跳跃表&#xff08;Skiplist&#xff09;是一种用于有序元素集合的快速查找数据结构。它通过一个多级索引来提高搜索效率&#xff0c;能够在对数时间复杂度内完成查找、插入和删除操作。跳跃表特别适用于实现有序集合&#xff08;sorted set&#xff09;的功能&#…...

C语言编译和编译预处理

1.编译预处理 • 编译是指把高级语言编写的源程序翻译成计算机可识别的二进制程序&#xff08;目标程序&#xff09;的过程&#xff0c;它由编译程序完成。 • 编译预处理是指在编译之前所作的处理工作&#xff0c;它由编译预处理程序完成 在对一个源程序进行编译时&#xff0…...

ahb 总线的一些思考

1. 如何处理对不存在地址的访问&#xff1f; 当主设备试图访问内存映射中不存在的地址时&#xff0c;系统需要处理这一情况以避免错误或未定义行为。通常通过使用默认从设备或错误响应机制来管理。具体如下&#xff1a; 默认从设备&#xff1a;默认从设备响应对未定义或不存在…...

spark shuffle写操作——SortShuffleWriter

写入的简单流程&#xff1a; 1.生成ExternalSorter对象 2.将消息都是插入ExternalSorter对象中 3.获取到mapOutputWriter&#xff0c;将中间产生的临时文件合并到一个临时文件 4.生成最后的data文件和index文件 可以看到写入的重点类是ExternalSorter对象 ExternalSorter 基…...

ESP32CAM物联网教学12

ESP32CAM物联网教学12 MicroPython 视频服务 小智希望能在MicroPython中实现摄像头的视频服务&#xff0c;就像官方示例程序CameraWebServer那样。 下载视频服务驱动库 小智通过上网搜索&#xff0c;发现相关的教学材料还不少&#xff0c;并且知道有人已经写出了视频服务的驱…...

【C++精华铺】12.STL list模拟实现

1.序言 STL (Standard Template Library)是C标准库中的一个重要组件&#xff0c;提供了许多通用的数据结构和算法。其中&#xff0c;STL list是一种带头双向链表容器&#xff0c;可以存储任意类型的元素。 list的特点包括&#xff1a; 双向性&#xff1a;list中的元素可以根据需…...

ChatGPT Mac App 发布!

2024 年 6 月&#xff0c;OpenAI 的大语言模型 ChatGPT 的 Mac 客户端与 ChatGPT-4o 一起发布了。ChatGPT Mac 户端可以让用户直接在 Mac 电脑上使用 ChatGPT 进行对话。它提供了一个简单易用的用户界面&#xff0c;用户可以在其中输入文本或语音指令&#xff0c;并接收模型生成…...

ACE之ACE_Time_Value

简介 ACE_Time_Value在ACE中表示时间&#xff0c;集成不同平台的时间 结构 #mermaid-svg-dGoKn1R7GicabUif {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dGoKn1R7GicabUif .error-icon{fill:#552222;}#mermaid-…...

[论文笔记] 自对齐指令反翻译:SELF-ALIGNMENT WITH INSTRUCTION BACKTRANSLATION

https://arxiv.org/pdf/2308.06259 这篇论文介绍了一种名为“指令反向翻译”(instruction backtranslation)的方法,用于通过自动标记人类书写的文本和相应的指令来构建高质量的指令跟随语言模型。这里是一个通俗易懂的解释: 一、背景 通常,训练一个高质量的指令跟随语言…...

算术运算符. 二

# 表达式 # 操作数和运算符组成 比如 11 # 作用&#xff1a;表达式可以求值&#xff0c;也可以给变量赋值。 # Python算术运算符&#xff1a; # - * / % //&#xff08;整除:向下取整&#xff09; ** print(10 4) # 14 print(10 - 4) # 6 print(10 * 4) # 40 …...

代码优化方法记录

每次代码 review 之后&#xff0c;对 review 的情况进行总结记录&#xff0c;产出实际经验&#xff0c;方便组内学习、分享。 1、提取公共内容 公共内容要提取&#xff0c;避免重复编写&#xff1b; 2、css 色值使用变量 css 中的色值、字体&#xff0c;都换成组件库中的变…...

qt 图形、图像、3D相关知识

1.qt 支持3d吗 Qt确实支持3D图形渲染。Qt 3D模块是Qt的一个组成部分&#xff0c;它允许开发者在Qt应用程序中集成3D内容。Qt 3D模块提供了一组类和函数&#xff0c;用于创建和渲染3D场景、处理3D对象、应用光照和纹理等。 Qt 3D模块包括以下几个主要组件&#xff1a; Qt 3D …...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...