什么是拦截器?什么是过滤器?

2023-10-27

原文链接:https://www.longkui.site/program/frontend/pipe/4408/

0.背景
写项目的时候用到了拦截器,会决定哪些接口拦截,哪些接口不拦截。偶尔一次等保测评的时候又遇到了筛选器。这篇文章简单总结一下。

1.拦截器
拦截器,是面向切面编程(AOP,Aspect Oriented Program)的。就是在你的Service或者一个方法前调用一个方法,或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

2.筛选器
过滤器,是在java web中将你传入的request、response提前过滤掉一些信息,或者提前设置一些参数。然后再传入Servlet或Struts2的 action进行业务逻辑处理。比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入Servlet或Struts2的action前统一设置字符集,或者去除掉一些非法字符。

通俗理解:
(1)过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。(理解:就是一堆字母中取一个B)
(2)拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。(理解:就是一堆字母中,干预它,通过验证的少点,顺便干点别的东西)

3.区别
①:拦截器是基于java的反射机制的,而过滤器是基于函数的回调。
②:拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
③:拦截器只对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④:拦截器可以访问action上下文、值、栈里面的对象,而过滤器不可以。
⑤:在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥:拦截器可以获取IOC容器中的各个bean,而过滤器不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

4.触发
过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

过滤器包裹servlet,servlet包裹住拦截器

5.场景
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如hibernate,在进入处理器打开Session,在完成后关闭Session。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是拦截器?什么是过滤器? 的相关文章

  • 如何克服原语按值传递的事实

    我有一段很长的代码来计算两个值 doubles 对我来说 我在几个地方使用了这段代码 为了坚持 DRY 原则 我应该将这段代码重构为一个很好的单元测试方法 但是我不能让它返回两个双精度数 而双精度数是原始的 因此不能按值传递和操作 我能想到
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • IntelliJ - 调试模式 - 在程序内存中搜索文本

    我正在与无证的第三方库合作 我知道有一定的String存储在库深处的某个字段中的某处 我可以预测的动态值 但我想从库的 API 中获取它 有没有一种方法可以通过以下方式进行搜索 类似于全文搜索 full程序内存处于调试模式并在某个断点处停止
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从

随机推荐

  • linux查看文件位置

    这本阿里P8撰写的算法笔记 再次推荐给大家 身边不少朋友学完这本书最后加入大厂 Github 疯传 史上最强悍 阿里大佬 LeetCode刷题手册 开放下载了 查找文件 在linux中 我经常碰到一个问题 就是如何找到某个文件 有时可能是找
  • OkHttp GET 和 POST 的使用

    1 OkHttp 介绍 Android 系统主要提供两种方式来进行 HTTP 通信 HttpURLConnection 和 HttpClient 但是由于 HttpClient 的 API 数量过多 从 Android 2 3 及以后版本中
  • QT MSVC中文编译出错error: C2001: 常量中有换行符

    QT上用MSVC去编译部分含有中文的字符串时会出现编译错误error C2001 常量中有换行符 但用MinGW就不会 需在后面加个正常的字符才能正常编译 但出现乱码了 其编码如下图 明显的看着编码不对 如果想都编译成功 那就需要在设置里把
  • Sqli-labs之Less-24(二次注入)

    Less 24 POST型基于存储的二次注入 随意输入 点击 Forgot your password 翻译 如果你忘记了密码 去黑掉它 点击 New User click here 注册用户 尝试注册一个用户 用户 test1 密码 te
  • STM8单片机STVD环境新建工程笔记

    转载 https blog csdn net sy lixiang article details 8461829 1 新建1个工程目录 依项目的名字来起 2 在上述的目录内新建1个名为STVD的目录 因我们用ST官方的开发环境来新建的工程
  • QT自定义结构体struct—— 基于QVariant 类 用于信号与槽

    1 头文件加 include
  • python openpyxl 向已存在的excel表格中写入数据 及可能出现的Error处理

    虽然平时数据文件读写都是用的 csv 但还是偶然需要把数据写入恶心的excel表格 在CSDN上搜了很多相关的博客 发现都是用的xlutils xlrd xlwd三者的结合 直接拿来用了之后 发现写入后的excel表格就会格式错误打不开 于
  • 从“制造”之城,到“智造”标杆,长沙何以站上发展新高地?

    图片源自网络 文 易不二 来源 智能相对论 ID aixdlun 中国中部的湖南是众多制造业企业走向数字化 网络化 最终以智能制造为目标的聚集地 上个月 长沙城市品牌塑造及国际形象传播研讨会后 11家国际媒体中 越南之声广播电台刊在 中国将
  • 【开关电源四】电源拓扑之Cuk、Sepic、Zeta

    个人主页 highman110 作者简介 一名硬件工程师 持续学习 不断记录 保持思考 输出干货内容 目录 1 Cuk变换器 1 1 Cuk电路工作原理 1 2 Cuk电路输入输出关系推导 2 Sepic变换器 2 1 Sepic电路工作原
  • C盘空间不足怎么清理,详细的c盘清理方法归类

    C盘空间不足怎么清理 当你的计算机告诉你C盘空间不足时 这意味着你需要清理一些文件或程序来腾出更多的空间 在本文中 我们将介绍一些常用的方法 帮助你清理C盘空间 方法一 清理临时文件 许多应用程序和操作系统会在C盘上创建临时文件 这些文件会
  • U盘装完系统之后磁盘容量变小解决办法

    我在用Win32 Disk Imager工具制作U盘系统盘之后 发现U盘大小变为2M 另外的大小没有被分配 解决办法如下 http jingyan baidu com article 59703552e754e48fc00740ed htm
  • 一个tomcat部署多个项目(同端口,多项目,不同访问路径)

    个人觉得简单易操作的两种部署方式 使用tomcat的自动部署 适用于文件和war包 不需要重启tomcat服务 自定义web部署文件 只适用于文件形式的 需要重启tomcat服务 一 自动部署 步骤 浏览器输入127 0 0 1 8080
  • uniapp 小程序中使用逆地址解析 获取当前详细地址

    描述 获取当前定位的经纬度后使用 逆地址解析 获取到详细的地址 uniapp和微信小程序获取地址有两个API getLocation和chooseLocation 但都没有返回省市区等具体信息 那我们可以获取当前经纬度 然后使用逆地址解析接
  • 数据分析案例-大数据相关招聘岗位可视化分析_招聘信息数据集

    文章目录 数据集介绍 数据预处理 数据可视化 数据集介绍 本次数据集来源于xx招聘网共计4223条招聘信息 每条招聘信息字段包括岗位名称 公司名称 工作经验要求 学历要求 工作地点 薪酬 公司规模 发布时间 公司福利共9条字段信息 数据预处
  • 粒子系统学习(1)

    Particle System Duration 产生 发射 粒子的时间 比如不勾选Looping Duration为5 Start Lifetime为6 那么在运行11s的时候粒子效果消失 Looping 是否循环 发射 产生 和Dura
  • [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势

    思来想去 虽然很忙 但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客 包括网络爬虫 可视化分析 GIS地图显示 情感分析 舆情分析 主题挖掘 威胁情报溯源 知识图谱 预测预警及AI和NLP应用等 希望该系列线上远程教学对您有所
  • DeepLearnToolbox使用总结

    目录 DeepLearnToolbox Directories included in the toolbox Setup GitHub链接 DeepLearnToolbox DeepLearnToolbox A Matlab toolbo
  • CAP、BASE、一致性

    感谢博主 转自 从分布式一致性谈到CAP理论 BASE理论 问题的提出 在计算机科学领域 分布式一致性是一个相当重要且被广泛探索与论证问题 首先来看三种业务场景 1 火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家 通常他是去车站的
  • Visual Studio查找搜索类和方法的快捷方法

    Visual Studio 2010有 Navigate To 命令 键盘快捷键是 CTRL 或 Ctrl T
  • 什么是拦截器?什么是过滤器?

    原文链接 https www longkui site program frontend pipe 4408 0 背景 写项目的时候用到了拦截器 会决定哪些接口拦截 哪些接口不拦截 偶尔一次等保测评的时候又遇到了筛选器 这篇文章简单总结一下