ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

拦截器与过滤器的区别

2022-07-06 12:08:19  阅读:140  来源: 互联网

标签:容器 拦截器 请求 区别 调用 过滤器 servlet


一、概述

1、过滤器
依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。

2、拦截器
依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。这就是过滤器做的事情。

拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这就是拦截器做的事情。

二、拦截器和过滤器的区别与关系

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


拦截器与过滤器的关系

如上图所示:过滤器包裹住servlet,servlet包裹住拦截器。
过滤器触发时机:过滤器是在请求进入容器后,在请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。


三、过滤器和拦截器的执行逻辑


四、参考博文

(1) https://www.cnblogs.com/panxuejun/p/7715917.html
(2) https://www.jianshu.com/p/7bd0cad17f23
(3) https://zhuanlan.zhihu.com/p/69060111

标签:容器,拦截器,请求,区别,调用,过滤器,servlet
来源: https://www.cnblogs.com/nbfangzhu/p/16450265.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有