Spring—拦截器和过滤器介绍

news/2024/7/5 3:13:37

介绍

过滤器(Filter)

  1. 过滤器是Java Web中奖传入的request、response提前过滤掉一些信息或提前设置一些参数,然后再传入到Servlet或action进行业务逻辑处理。如过滤非法url、过滤非法字符等。
  2. 过滤器依赖于servlet容器,可以对几乎所有请求进行过滤,但一个过滤器实例只能在容器初始化时调用一次。

拦截器(Interceptor)

  1. 拦截器是面向切面编程的,在service或一个方法前后调用一个方法,如调用方法前打印日志、动态代理。
  2. 拦截器依赖于web框架,如spring mvc框架。
  3. 一个拦截器在一个controller生命周期内可以多次调用,可以对静态资源的请求进行拦截处理。

包含关系

过滤器和拦截器
1、拦截器(Interceptor)只对action请求起作用 即对外访问路径,而过滤器(Filter)则可以对几乎所有的请求都能起作用 包括css js等资源文件
2、拦截器(Interceptor)是在Servlet和Controller控制器之间执行,而过滤器(Filter)是在请求进入Tomcat容器之后 但是在请求进入Servlet之前执行。web.xml加载顺序:context- param -> listener -> filter -> servlet。在请求结束返回时也是一样,是在Servlet处理完之后返回给前端之间执行。

比较

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

特性过滤器(Filter)监听器(Listener)拦截器(Interceptor)
入参web请求系统级别参数、对象Action(部分web请求
实现函数回调事件反射机制(动态代理)
应用场景1、设置字符编码
2、URL级别的权限访问控制
3、过滤敏感词汇
4、压缩响应信息
1、统计网站在线人数
2、清除过期session
1、拦截未登录用户
2、审计日志
是否依赖servlet容器依赖-不依赖
servlet提供支持Filter接口1、ServletContextListener抽象接口
2、HttpSessionListener抽象接口
-
Spring提供支持--HandlerInterceptor
MethodInterceptor
级别系统级系统级非系统级

http://lihuaxi.xjx100.cn/news/98254.html

相关文章

【Java中23种面试常考的设计模式之模板模式(Template)---行为型模式】

【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】 知识回顾: 之前我们讲过的设计模式在这里呦: 【面试最常见的设计模式之单例模式】 【面试最常见的设计模式之工厂模式】 【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】 【Java中23种…

【day11】最近公共祖先最大连续bit数

最近公共祖先__牛客网 求父节点:父节点 孩子节点/2 (1)输入a ,b 如果ab,表示ab的公共祖先就是ab本身 (2)如果ab不相同,循环while哪个大,哪个除以2,直到相…

关于Linux系统之VM安装配置(每一个步骤都超级详细的哦!)

目录 Linux简介 VM虚拟机的介绍及安装 VM简介 VM安装(详细步骤,根据图片一步一步进行安装) 查看IP配置IP 换源 1)备份Linux自带的EPEL源 2)生成阿里源 3) 清空缓存 4) 重新生成缓存 Linux…

职业转型|经济低迷期转型产品管理职业的五大建议

当前的经济低迷使许多人开始重新评估当前的工作并重新考虑新的职业道路。产品管理是一个非常热门的职业发展方向,受到了求职者们广泛的关注,但于此同时,这也加剧了这个领域的竞争。产品管理的进入门槛本就并不低,在经济衰退期间&a…

[爬虫]4.数据解析及应用 之 bs4【爬取一部小说的文本】

回顾,上节课我们学了什么? 聚焦爬虫 数据解析方式分类:正则表达式;bs4模块;xpath模块 F12查看网页标签的html格式 正则表达式详细表示方法 正则匹配 import re listre.findall(pattern,string,flags) 创建文件夹 爬取和…

python 线程安全和锁

python 线程安全和锁 进程是计算机中最小的资源分配单位。 线程是计算机中能被cpu调度的最小单位。 一、什么是线程? 线程也叫轻量级进程,是操作系统能够进行调度的最小单位,它被包含在进程之中,是进程的实际运作单位。线程自…

简单的介绍一下:柔性数组

对于柔性数组,其实这个是在如今的大学生书本上是很难能找到的!!原因在于:笔者现在就是大学生一枚!!但是在C语言的书本上没有涉及到柔性数组的部分!!经查略资料,我们可以找…

Codeforces Round #827 (Div. 4)

A:给定三个数字,问是否存在1个数字是另外两个的和 void solve(){int a, b, c;cin >> a >> b >> c;if(a b c || a c b || b c a) puts("YES");else puts("NO"); } B:给定一个数组&#xff0…