一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么
java 过虑器 、拦截器 、监听器的区别?
-
实现原理:
- 过滤器基于函数回调实现。
- 拦截器基于Java的反射机制实现。
- 监听器用于监听特定事件的发生,并作出相应处理。
-
使用范围:
- 过滤器依赖于Tomcat等容器,主要用于Web程序。
- 拦截器不依赖于servlet容器,可应用于Web程序、Application、Swing等。
- 监听器同样可用于监听Web程序中的特定事件。
过滤器的应用场景
1、过滤敏感词汇(防止sql注入)
2、设置字符编码
3、URL级别的权限访问控制
4、压缩响应信息
拦截器的应用场景
1、登录验证,判断用户是否登录。
2、权限验证,判断用户是否有权限访问资源,如校验token
3、日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
4、处理cookie、本地化、国际化、主题等。
5、性能监控,监控请求处理时长等。
6、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用
-
触发时机:
- 过滤器在请求进入Servlet之前和响应返回给前端之前进行预处理。
- 拦截器在请求进入Servlet后,但在进入Controller之前进行预处理。
- 监听器在特定事件发生时触发,如Servlet生命周
- 过滤器、拦截器和监听器的简单示例期中的创建、初始化、销毁等。
过滤器、拦截器和监听器的简单示例
import javax.servlet.*;
import java.io.IOException;public class SimpleFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 过滤器初始化时执行的方法System.out.println("Filter initialized");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求处理之前可以添加逻辑System.out.println("Before request processing");chain.doFilter(request, response); // 将请求传递给下一个过滤器或目标资源// 在请求处理之后可以添加逻辑System.out.println("After request processing");}@Overridepublic void destroy() {// 过滤器销毁时执行的方法System.out.println("Filter destroyed");}
}
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SimpleInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 在请求处理之前进行调用(Controller方法调用之前)System.out.println("Before Controller method");return true; // 只有返回true才会继续向下执行,返回false取消当前请求}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)System.out.println("After Controller method, before view rendering");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {// 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要用于进行资源清理工作)System.out.println("After view rendering");}
}
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class SimpleListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {// 当ServletContext被初始化时调用System.out.println("ServletContext initialized");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {// 当ServletContext被销毁时调用System.out.println("ServletContext destroyed");}
}
如何配置过滤器、拦截器和监听器?
@Component
public class MyFilter implements Filter {// 实现doFilter等方法
}// 拦截器 注入
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");}
}@Component
public class MyListener implements ServletContextListener {// 实现contextInitialized、contextDestroyed等方法
}
相关文章:
一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么
java 过虑器 、拦截器 、监听器的区别? 实现原理: 过滤器基于函数回调实现。拦截器基于Java的反射机制实现。监听器用于监听特定事件的发生,并作出相应处理。 使用范围: 过滤器依赖于Tomcat等容器,主要用于Web程序。拦截…...
本体映射与本体集成
文章目录 本体映射与本体集成本体映射分类知识挖掘是从己有的实体及实体关系出发挖掘新的知识,具体包括知识内容挖掘和知识结构挖掘。 本体映射与本体集成 解决本体异构的通用方法是本体集成与本体映射。本体集成直接将多个本体合并为一个大本体,本体映射则寻找本体间的映射…...
华媒舍:10种提升推特大V发文推广曝光率的方式
在社交媒体时代,推特已成为许多大V达到更广泛受众的重要渠道。并非所有的推文都能获得理想的曝光率。为了帮助大V们提升推文的曝光率,本文将介绍10种有效的方式。 1. 精心构思内容 好的内容是吸引读者和提升曝光率的关键。大V们应该从听众的角度出发&am…...
前端本地存储数据:深入解析与代码示例(Cookie、LocalStorage、SessionStorage和IndexedDB)
在现代Web应用中,前端本地存储是实现用户个性化体验的关键技术。本文将深入探讨前端本地存储的四种主要技术:Cookie、LocalStorage、SessionStorage和IndexedDB,并提供具体的代码示例。 Cookie 简介 Cookie是由服务器创建并存储在用户浏览…...
Java语言程序设计基础篇_编程练习题*18.21 (将十进制数转换为二进制数)
*18.21 (将十进制数转换为二进制数) 编写一个递归方法,将一个十进制数转换为一个二进制数的字符串。方法头如下: public static String dec2Bin(int value)编写一个测试程序,提示用户输入一个十进制数,然后显示等价的二进制数。 代码示例 …...
中年转行新可能:18 个月迈向大模型提示词工程师
【导读】 人到中年,想半路转行成为大模型提示词工程师,这可行吗?最近,一位国外小哥成功转行,他在一篇干货满满的硬核博客中给出了答案:完全可行! 转行成为大模型提示词工程师,到底…...
C++通过返回值和输出参数的原理是什么?分别有什么优势和缺点?
C中,通过返回值和输出参数(通常是通过引用或指针)是函数与外部世界交换数据的两种主要方式。它们各自有着不同的原理和优缺点。 通过返回值 原理: 当函数通过返回值向调用者传递数据时,它实际上是在函数执行完毕后&…...
AI客服机器人开启企业客户服务新纪元
随着人工智能(AI)技术的迅猛发展,使得AI客服机器人走进了我们的视野,成为提高客户满意度和业务效率的不二法宝。这些智能机器人不仅能够处理海量信息,还能为客户提供个性化的服务体验。 一、AI客服机器人的基本原理 AI客服机器人是基于人工智…...
TPM项目课题的确定需要考虑哪些因素?
确定一个合适的TPM项目课题,是企业启动并成功实施TPM计划的第一步。这一过程不仅需要深入洞察企业现状,还需前瞻性地规划未来发展。详情如深圳天行健精益化生产管理咨询公司下文所述: 一、企业战略目标 1.与企业长期发展规划的契合度 -TPM项…...
Rust 数据类型
文章目录 发现宝藏1. 标量类型1.1 整型1.2 浮点型1.3 布尔型1.4 字符型 2. 复合类型2.1 元组2.2 数组 3. 总结 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Rust 是一种静态…...
C#无标题栏窗体拖动
要实现C#无标题栏窗体的拖动功能,可以通过以下步骤实现: 在窗体的构造函数中添加以下代码,以去掉标题栏: this.FormBorderStyle FormBorderStyle.None;然后,添加以下代码以处理鼠标按下事件: private c…...
MySQL容器配置连接数数,镜像重启生效
若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 方法一 在 docker-compose.yml 中配置 MySQL 的连接数,可以通过环境变量或配置文件来实现。以下…...
《OpenCV计算机视觉》—— 身份证号码识别案例
文章目录 一、案例实现的整体思路二、代码实现1.首先定义两个函数2.模板图像中数字的定位处理3.身份证号码数字的定位处理4.使用模板匹配,计算匹配得分,找到正确结果 一、案例实现的整体思路 下面是一个数字0~9的模板图片 案例身份证如下: 对…...
如何使用正则表达式替换字符串中的特定位置数字
如何使用正则表达式替换字符串中的特定位置数字 1、效果 把字符串中的第一个123替换掉: 2、代码 使用正则中的sub函数: re.sub(pattern,repl,string,count=0,flags=0) pattern:表示需要匹配的模式,即需要被替换的字符或字符串。 repl:表示替换后的字符串或函数,用于…...
【SQL】在SQL中,行转列
在SQL中,行转列通常是指将数据从水平方向(行)转换为垂直方向(列),这可以通过使用CASE语句或数据库特有的函数如PIVOT(在SQL Server中)来实现。下面我将通过一个具体的例子来说明如何…...
95. UE5 GAS RPG 实现创建多段飞弹攻击敌人
从这篇开始,我们将实现一些技能,比如多段火球术,闪电链等等。 在这一篇里,我们先实现多段火球术,技能可以通过配置发射出多个火球术进行攻击。 创建多段火球函数 首先在我们之前创建的RPGFireBolt.h类里面增加一个生…...
分布式集群下如何做到唯一序列号
优质博文:IT-BLOG-CN 分布式架构下,生成唯一序列号是设计系统常常会遇到的一个问题。例如,数据库使用分库分表的时候,当分成若干个sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。实现思…...
在 Vue 2 中使用 Axios 发起 POST 和 GET 请求
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js,它提供了一种非常方便的方式来发送异步 HTTP 请求。在 Vue 2 应用中,Axios 可以帮助我们轻松地与后端 API 进行通信。本文将介绍如何在 Vue 2 项目中引入 Axios,并…...
Linux内核初始化过程中加载TCP/IP协议栈
Linux内核初始化过程中加载TCP/IP协议栈 Linux内核初始化过程中加载TCP/IP协议栈,从start_kernel、kernel_init、do_initcalls、inet_init,找出Linux内核初始化TCP/IP的入口位置,即为inet_init函数。 Linux内核启动过程 之前的实验中我们设…...
Mysql树形结构表-查询所有子集数据
表结构,这里只是个例子,所有的树形结构表均可用: CREATE TABLE zhkt_course_chapter (id bigint NOT NULL COMMENT 唯一id,course_id bigint NOT NULL COMMENT 所属课程id,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general…...
保姆级教程 | Gaussian优化后的能量值
背景Gaussian优化后会获得很多能量,应该如何区别这些能量的差异性步骤1. 电子能(纯 SCF 能量,无热修正):单点能、对比电子结构、不加热效应grep Done 文件名.log这是纯电子能量,只包含电子结构,…...
C++ inline函数深度解析:从链接属性到性能优化的实战指南
1. 项目概述:为什么我们需要关注inline函数?在C项目里,尤其是那些对性能有极致追求的系统、游戏引擎或者高频交易框架中,你经常会看到代码里散落着inline关键字。新手可能会觉得它只是个“建议编译器内联”的提示符,有…...
从打磨抛光到医疗康复:拆解阻抗控制在机器人实际场景中的选型指南
从打磨抛光到医疗康复:拆解阻抗控制在机器人实际场景中的选型指南 在工业4.0和智能制造的浪潮中,机器人技术正从传统的重复定位作业向更复杂的交互任务演进。无论是汽车制造中的精密装配,还是医疗器械的力控打磨,亦或是康复训练中…...
三分钟搞定B站缓存视频:m4s转MP4的傻瓜式完整教程
三分钟搞定B站缓存视频:m4s转MP4的傻瓜式完整教程 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是不是也遇到过这样的烦恼&#…...
InfluxDB-从时序数据模型到实战:核心原理与Web UI高效入门
1. 时序数据库与InfluxDB初探 第一次接触时序数据库时,我盯着监控大屏上跳动的曲线发愣——这些每秒产生数万条记录的传感器数据,传统数据库根本扛不住。直到同事推荐了InfluxDB,这个专门为时间序列数据设计的数据库,才真正解决了…...
如何为本地音乐库批量下载同步歌词:LRCGET终极指南
如何为本地音乐库批量下载同步歌词:LRCGET终极指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 还在为海量本地音乐文件找不到歌词而烦恼…...
别再复制粘贴了!用LaTeX写IEEE论文,这份保姆级配置清单(含数学符号速查表)帮你一次搞定
IEEE论文LaTeX高效写作:从零配置到数学符号速查的全套解决方案 第一次用LaTeX写IEEE论文时,我在凌晨三点对着报错的红色文字和错位的公式几乎崩溃。直到一位博士生分享了他的配置文件,我才发现原来90%的常见问题都有现成解决方案。本文将把这…...
Few-shot vid2vid自定义数据集训练指南:从标签图到真实视频的转换
Few-shot vid2vid自定义数据集训练指南:从标签图到真实视频的转换 【免费下载链接】few-shot-vid2vid Pytorch implementation for few-shot photorealistic video-to-video translation. 项目地址: https://gitcode.com/gh_mirrors/fe/few-shot-vid2vid Few…...
【全新升级】PC 端 Open Claw v 2.7.5 零基础搭建步骤
📌 前言 开源圈热门的「数字员工」OpenClaw(昵称小龙虾),GitHub 星标突破 28 万,凭借本地运行 零代码操作 自动干活的核心优势广受关注!很多人误以为它是普通聊天 AI,实则是能真正操控电脑的…...
