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

Servlet 过滤器(Filter)

一、过滤器是什么统一处理所有请求 / 响应不用每个 Servlet 都写重复代码Servlet 过滤器 服务器端的 “门卫 / 拦截器”它在请求到达 Servlet 之前先拦截也可以在响应返回客户端之前再处理可以对请求、响应、会话做统一处理一个项目可以配多个过滤器形成过滤链二、过滤器能做什么统一编码设置解决中文乱码登录校验未登录不能访问权限控制日志记录请求 / 响应内容修改压缩响应、跨域处理三、过滤器核心接口过滤器必须实现javax.servlet.Filter接口注意必须重写 3 个方法init()初始化服务器启动时执行一次doFilter()核心过滤方法每次请求都走这里destroy()销毁服务器关闭时执行四、过滤器执行流程超级重要chain.doFilter(request, response)这行代码 放行让请求继续往后走不写这行 拦截请求到此为止五、过滤器应用1、统一编码过滤器解决中文乱码package org.hlx.javaweb3_0323; import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; /** * author : HLX * ClassName :CharacterFilter * date : 2026/3/24 9:26 * Version :1.0 * Description: TODO * modyified By : */ WebFilter(urlPatterns /*, initParams {jakarta.servlet.annotation.WebInitParam(name encoding, value UTF-8)}) public class CharacterFilter implements Filter { // 获取初始化参数 private String encoding; Override public void init(FilterConfig filterConfig) throws ServletException { // 获取初始化参数 String encoding filterConfig.getInitParameter(encoding); if (encoding ! null) { this.encoding encoding; } System.out.println(1、字符编码过滤器初始化); } Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //类型转换 HttpServletRequest request (HttpServletRequest) servletRequest; HttpServletResponse response (HttpServletResponse) servletResponse; //设置编码格式 request.setCharacterEncoding(encoding); response.setCharacterEncoding(encoding); response.setContentType(text/html;charset encoding); //放行请求 filterChain.doFilter(servletRequest, servletResponse); System.out.println(2、字符编码过滤器执行); } Override public void destroy() { System.out.println(3、字符编码过滤器销毁); } }六、过滤器两种配置方式1. 注解配置最简单推荐WebFilter(urlPatterns /*, initParams {WebInitParam(name encoding, value UTF-8)})2. web.xml 配置传统方式!-- 配置过滤器-- filter filter-nameCharacterFilter/filter-name filter-classorg.hlx.javaweb3_0323.CharacterFilter/filter-class !-- 配置过滤器初始化参数-- init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param /filter !-- 配置过滤器映射-- filter-mapping filter-nameCharacterFilter/filter-name url-pattern/*/url-pattern /filter-mapping七、多个过滤器执行顺序注解按类名字母顺序执行web.xml按mapping 配置顺序执行2、登录校验过滤器未登录不能访问package org.hlx.javaweb3_0323; import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import java.io.IOException; /** * author : HLX * ClassName :LoginFilter * date : 2026/3/24 10:19 * Version :1.0 * Description: TODO * modyified By : */ // 只拦截后台管理页面 WebFilter(/admin/*) public class LoginFilter implements jakarta.servlet.Filter { Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 类型转换 HttpServletRequest request (HttpServletRequest) servletRequest; HttpServletResponse response (HttpServletResponse) servletResponse; // 获取session对象 HttpSession session request.getSession(); // 判断是否登录 if (session.getAttribute(username) ! null) { // 已登录放行请求 filterChain.doFilter(request, response); } else { // 未登录 → 拦截跳转到登录页 response.sendRedirect(request.getContextPath()/index.html); } System.out.println(2、登录过滤器拦截 request.getRequestURI()); } Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println(1、登录过滤器初始化); } Override public void destroy() { System.out.println(3、登录过滤器销毁); } }总结Filter 是请求拦截器统一处理请求 / 响应必须实现Filter接口重写doFilterchain.doFilter() 放行最常用统一编码、登录验证

相关文章:

Servlet 过滤器(Filter)

一、过滤器是什么?统一处理所有请求 / 响应,不用每个 Servlet 都写重复代码!Servlet 过滤器 服务器端的 “门卫 / 拦截器”它在 请求到达 Servlet 之前 先拦截也可以在 响应返回客户端之前 再处理可以对请求、响应、会话做统一处理一个项目可…...

【MCP集成终极指南】:VS Code插件下载、安装、配置与故障排除一站式实战手册

第一章:MCP 与 VS Code 插件集成教程MCP(Model Control Protocol)是一种面向大模型服务编排的轻量级通信协议,专为本地开发环境中的模型调用、上下文管理与工具协同设计。VS Code 作为主流开发工具,通过官方插件机制可…...

agent-rules:AI编程助手的规则引擎与发展蓝图

agent-rules:AI编程助手的规则引擎与发展蓝图 【免费下载链接】agent-rules Rules and Knowledge to work better with agents such as Claude Code or Cursor 项目地址: https://gitcode.com/gh_mirrors/ag/agent-rules 项目定位与核心架构 agent-rules作为…...

RWKV7-1.5B-g1a镜像免配置:/opt/model路径固化带来的稳定性提升

RWKV7-1.5B-g1a镜像免配置:/opt/model路径固化带来的稳定性提升 1. 模型简介 rwkv7-1.5B-g1a是基于新一代RWKV-7架构的多语言文本生成模型,特别适合中文场景下的轻量级应用。这个1.5B参数的版本在保持高效推理的同时,能够处理基础问答、文案…...

医疗影像分析新助手:Qwen3-VL-30B实战,上传CT/X光片快速获取解读

医疗影像分析新助手:Qwen3-VL-30B实战,上传CT/X光片快速获取解读 1. 医疗影像分析的痛点与解决方案 在医疗诊断过程中,医生每天需要解读大量CT、X光片等医学影像。传统工作流程存在几个明显痛点: 时间成本高:一位放…...

借助机器学习提升电商广告精准投放

借助机器学习提升电商广告精准投放关键词:机器学习、电商广告、精准投放、用户画像、推荐算法摘要:本文聚焦于如何借助机器学习技术提升电商广告的精准投放效果。首先介绍了该研究的背景、目的、预期读者和文档结构,解释了相关术语。接着阐述…...

微信跳一跳智能辅助:跨设备同步与高分秘籍全解析

微信跳一跳智能辅助:跨设备同步与高分秘籍全解析 【免费下载链接】wechat_jump_game 微信《跳一跳》Python 辅助 项目地址: https://gitcode.com/gh_mirrors/we/wechat_jump_game 在微信小游戏《跳一跳》中,玩家常因按压时间控制不当错失高分&…...

高端定制首选!晶盾不锈钢板材,耐刮抗指纹双在线的行业标杆

高端家居定制与商业空间装饰,选材是决定项目品质与档次的关键,不锈钢板材凭借质感高级、耐用易打理、风格百搭等优势,成为高端定制领域的热门选材。但在实际选材过程中,很多设计师、定制厂家都会遇到同一个难题:市面上…...

7个深度学习框架!Text-Classification-Pytorch 文本分类从入门到实践全攻略

7个深度学习框架!Text-Classification-Pytorch 文本分类从入门到实践全攻略 【免费下载链接】Text-Classification-Pytorch Text classification using deep learning models in Pytorch 项目地址: https://gitcode.com/gh_mirrors/te/Text-Classification-Pytorc…...

AI智能客服助手技术栈实战:从架构设计到生产环境优化

在构建AI智能客服助手的过程中,我们常常会遇到一个核心矛盾:如何让机器既能“听懂”用户的复杂意图,又能“流畅”地进行多轮对话,同时还要保证系统在高并发下的稳定与高效。传统的基于关键词或简单规则的客服系统,在面…...

实战深度解析:中山大学LaTeX论文模板的三大核心问题与解决方案

实战深度解析:中山大学LaTeX论文模板的三大核心问题与解决方案 【免费下载链接】sysu-thesis 中山大学 LaTeX 论文项目模板 项目地址: https://gitcode.com/gh_mirrors/sy/sysu-thesis 作为一名中山大学的学生,当你开始撰写毕业论文时&#xff0c…...

#新手必学:MySQL三大范式通俗讲解 | 什么时候该遵守?什么时候该打破?

本文承接MySQL库表设计规范系列内容,专门解决新手建表时最核心的困惑:天天听人说数据库三大范式,到底是什么?我建表必须严格遵守吗?为什么我严格按范式建表,查询要联五六张表,性能反而极差&…...

基于C++的ClearerVoice-Studio语音分离开发指南:多人会议场景应用

基于C的ClearerVoice-Studio语音分离开发指南:多人会议场景应用 1. 引言 多人会议录音处理一直是个让人头疼的问题——不同人声音混在一起,背景还有各种键盘声、空调声,整理会议纪要时简直像在解谜。传统的音频处理工具要么效果一般&#x…...

如何利用Intel RealSense SDK实现高精度三维点云生成?

如何利用Intel RealSense SDK实现高精度三维点云生成? 【免费下载链接】librealsense Intel RealSense™ SDK 项目地址: https://gitcode.com/GitHub_Trending/li/librealsense Intel RealSense SDK是一个功能强大的计算机视觉库,专门为Intel深度…...

Keil5嵌入式开发环境联动:通过语音指令辅助STM32项目调试

Keil5嵌入式开发环境联动:通过语音指令辅助STM32项目调试 作为一名在嵌入式一线摸爬滚打多年的工程师,我深知硬件联调时的“手忙脚乱”。一手按着复位键,一手操作鼠标,眼睛还得盯着串口助手和变量窗口,恨不得长出三头…...

摒弃固定采样频率,程序让仪器根据信号变化快慢,自动调整采样频率,兼顾精度和省电。

一、实际应用场景描述在《智能仪器与信号处理》课程实验中,学生常遇到两类设备:- 高速采集卡:固定 10kHz 采样- 低功耗传感器节点:固定 1Hz 采样但实际信号往往是这样的:- 静止状态 → 信号几乎不变- 突变瞬间 → 需要…...

app测试相关面试题

一、App 稳定性怎么做的?Monkey 怎么用? 稳定性这块,我们当时用的是SDK 自动的一个Monkey工具进行测试的,其实Monkey工具主要通过模拟用户发送伪随机时间去操作软件,通过执行Monkey命令,它会自动出报告,执行测试大概在10 万次,每个动作的间隔时间250ms,主要就是看软件…...

快速恢复误删的Anaconda环境

问题确认与初步处理检查回收站或垃圾箱,确认文件是否被彻底删除。若存在回收站中,直接恢复即可。停止对系统盘的一切写入操作,避免数据被覆盖。立即关闭不必要的程序,减少磁盘活动。使用数据恢复工具推荐工具:Recuva、…...

FR机械臂ROS开发环境配置避坑指南:从Ubuntu20.04到MoveIt完整流程

FR机械臂ROS开发环境配置避坑指南:从Ubuntu20.04到MoveIt完整流程 当第一次接触FR机械臂的ROS开发时,许多工程师都会在环境配置阶段踩坑。不同于普通的ROS开发,FR机械臂对系统环境、网络配置和依赖管理有着更严格的要求。本文将带你完整走通从…...

ComfyUI报错‘prompt outputs failed validation: checkpointloadersimple‘的深度解析与AI辅助修复方案

在ComfyUI的工作流开发中,prompt outputs failed validation: checkpointloadersimple是一个让开发者颇为头疼的报错。它通常出现在工作流执行到模型加载节点时,意味着系统对CheckpointLoaderSimple节点的输出进行了验证,但发现其不符合预期&…...

伏羲天气预报伦理治理:气象AI公平性评估、区域覆盖偏差检测与修正

伏羲天气预报伦理治理:气象AI公平性评估、区域覆盖偏差检测与修正 1. 引言:为什么气象AI也需要伦理治理 天气预报影响着我们生活的方方面面,从农业生产到交通出行,从灾害预警到商业决策。当AI技术进入气象预报领域,我…...

技术架构驱动的量化交易系统构建:从环境搭建到策略落地全指南

技术架构驱动的量化交易系统构建:从环境搭建到策略落地全指南 【免费下载链接】vnpy 基于Python的开源量化交易平台开发框架 项目地址: https://gitcode.com/vnpy/vnpy 在金融科技快速发展的今天,量化交易系统已成为机构和专业交易者的核心竞争力…...

告别手动翻MAP文件!用这个小工具让Keil5编译后自动显示内存/Flash占用进度条

嵌入式开发效率革命:Keil5自动内存分析工具实战指南 每次编译完代码,你是否还在为手动翻找MAP文件、计算内存占用而烦恼?在STM32等资源受限的MCU开发中,内存管理就像走钢丝——稍有不慎就会导致系统崩溃。传统方式下,开…...

类型与类型转换

数据类型 二进制,八进制(0),十进制,十六进制(0x)。整数类型int,字符串char,浮点float,小数double,长类型long… float类型拓展 因为精度和限制问题…...

SAR ADC工作原理与内部结构详解

逐次逼近型ADC内部结构与工作原理深度解析1. SAR ADC基本原理概述逐次逼近寄存器型模数转换器(SAR ADC)是现代嵌入式系统中应用最广泛的ADC架构之一。这种转换器以其适中的转换速度、较高的分辨率和较低的功耗特性,成为STM32等微控制器内置ADC的首选方案。SAR ADC的…...

基于单片机的贪吃蛇游戏设计[单片机]-计算机毕业设计源码+LW文档

摘要:本文详细阐述了基于单片机设计贪吃蛇游戏的全过程。通过需求分析明确游戏功能与性能要求,采用AT89C51单片机为核心控制单元,结合LCD12864显示屏、矩阵键盘等硬件设备实现游戏的基本框架。在软件设计方面,利用C语言编写程序&a…...

LangChain4j Tool实战:我把一个Spring Boot Service变成了AI的“手和脚”

LangChain4j与Spring Boot深度整合:将业务服务转化为AI智能体工具 在当今企业级应用开发中,AI能力的集成已从"锦上添花"转变为"不可或缺"。但如何让大语言模型真正理解并操作您的业务系统?本文将带您探索LangChain4j与Sp…...

深度学习创新改进系列:YOLOv8 + RFA(感受野注意力卷积)——动态调整有效感受野,让目标检测精度再上新台阶

摘要 在目标检测领域,如何有效提取多尺度特征一直是研究的热点与难点。传统的卷积操作受限于固定的感受野,难以自适应地处理不同尺度、不同形变的目标。本文提出将 RFA(Receptive Field Attention,感受野注意力卷积)模块引入 YOLOv8 目标检测框架中,通过动态调整卷积核的…...

多目标环形粒子群算法和多目标遗传算法跑MOCEC2020

多目标环形粒子群算法和多目标遗传算法跑MOCEC2020(24个多目标测试函数,matlab代码) 本号从现在起可以定制使用评估次数改进单目标群体算法,需要的私信,价格贵,质量高。 目录: 一、多目标环形粒…...

多因子模型下的黄金“深V”反转:AI模型拆解8%暴跌与反弹逻辑

摘要:本文通过多因子量化模型,结合通胀预期路径、利率定价机制与跨资产联动分析框架,解析现货黄金在4500至4100美元区间内的剧烈波动过程,并刻画其“深V”反转背后的宏观驱动与资金行为逻辑。一、极端波动建模:金价深度…...