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

一篇文章就搞懂了:过虑器 、拦截器 、监听器是什么

java  过虑器 、拦截器 、监听器的区别?

  1. 实现原理‌:

    • 过滤器基于函数回调实现。
    • 拦截器基于Java的反射机制实现。
    • 监听器用于监听特定事件的发生,并作出相应处理。
  2. 使用范围‌:

    • 过滤器依赖于Tomcat等容器,主要用于Web程序。
    • 拦截器不依赖于servlet容器,可应用于Web程序、Application、Swing等。
    • 监听器同样可用于监听Web程序中的特定事件。

        过滤器的应用场景

                1、过滤敏感词汇(防止sql注入)
                2、设置字符编码
                3、URL级别的权限访问控制
                4、压缩响应信息
        拦截器的应用场景
                1、登录验证,判断用户是否登录。
                2、权限验证,判断用户是否有权限访问资源,如校验token
                3、日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
                4、处理cookie、本地化、国际化、主题等。
                5、性能监控,监控请求处理时长等。
                6、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用

  1. 触发时机‌:

    • 过滤器在请求进入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…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

goreplay

1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具&#xff0c;可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长&#xff0c;测试它所需的工作量也会呈指数级增长。GoRepl…...

RLHF vs RLVR:对齐学习中的两种强化方式详解

在语言模型对齐&#xff08;alignment&#xff09;中&#xff0c;强化学习&#xff08;RL&#xff09;是一种重要的策略。而其中两种典型形式——RLHF&#xff08;Reinforcement Learning with Human Feedback&#xff09; 与 RLVR&#xff08;Reinforcement Learning with Ver…...

JUC并发编程(二)Monitor/自旋/轻量级/锁膨胀/wait/notify/锁消除

目录 一 基础 1 概念 2 卖票问题 3 转账问题 二 锁机制与优化策略 0 Monitor 1 轻量级锁 2 锁膨胀 3 自旋 4 偏向锁 5 锁消除 6 wait /notify 7 sleep与wait的对比 8 join原理 一 基础 1 概念 临界区 一段代码块内如果存在对共享资源的多线程读写操作&#xf…...