Filter与Interceptor的区别
前言
在看springboot项目时,其中的会话持续时,了解到token,session,jwt等方法,但是接着我就了解到过滤器(Filter)以及拦截器(Interceptor),感觉这两个东西真的有够像的了,也是去看了好多篇文章。接下来就分别讲一下,Filter与Interceptor,最后讲一下两者的区别。(本篇参考了几篇博客,我会在对应处留下链接的)
过滤器(Filter)
基于Servlet实现,是将java web传入的request、以及响应的response提前过滤掉一些信息或设置一点参数。
Filter过滤器随web应用的启动而启动,且只初始化一次。
Filter接口内,需实现init、doFilter以及destroy方法
void init(FilterConfig filterConfig):容器启动会调用用于初始化,整个程序运行期只会被调用一次。
void doFilter(ServletRequest request, ServletResponse response,FilterChain chain):doFilter为具体的过滤功能代码。
void destroy():当Filter 要销毁时,进行相关资源的回收工作。
拦截器(Interceptor)
是SpringMVC中实现的一种基于Java反射,是在Action执行的前后执行一段代码或执行前阻止其执行。
需实现preHandle、postHandle以及afterCompletion方法
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handle):在请求前被调用。就如我们开始说的jwt的问题,在执行操作之前会先要验证用户的登录信息,这个就可以在这个方法中实现,如果验证成功则返回 true,继续执行数据操作业务;否则就返回 false,后续操作数据的业务就不会被执行了。
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView):调用请求方法之后执行,但它会在 DispatcherServlet (前端控制器)进行渲染视图之前被执行。
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex):会在请求结束之后再执行,也就是在 DispatcherServlet (前端控制器)渲染了对应的视图之后再执行。
主要区别
1.Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理。
2.过滤器是在请求进入容器后、进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
就是过滤器会先执行,然后才会执行拦截器,执行时机不同。
(图片来源https://cloud.tencent.com/developer/article/2142914)

3.最简单明了的区别(参考https://zhuanlan.zhihu.com/p/340397290)
过滤器可以修改request,而拦截器不能
过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境
拦截器可以调用IOC容器中的各种依赖,而过滤器不能
过滤器只能在请求的前后使用,而拦截器可以详细到每个方法
过滤器(Filter) :可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息。
拦截器(Interceptor):可以拿到你请求的控制器和方法,却拿不到请求方法的参数。
切片(Aspect): 可以拿到方法的参数,但是却拿不到http请求和响应的对象
4.使用场景
拦截器使用场景:
登录验证,判断用户是否登录。
权限验证,判断用户是否有权限访问资源,如校验token
过滤器使用场景:
URL级别的权限访问控制
过滤敏感词汇(防止sql注入)
设置字符编码
最后我看到一个问题:拦截器只能拦截部分web请求,这句话怎么理解?(https://segmentfault.com/a/1190000037755221#item-4-1)
拦截器的拦截,是基于java反射机实现,拦截对象只能是实现了接口的类,而不能拦截url这种链接
Filter与Interceptor的区别的更多相关文章
- 过滤器和拦截器filter和Interceptor的区别
1.创建一个Filter过滤器只需两个步骤 创建Filter处理类 web.xml文件中配置Filter 2.Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的 ...
- filter和interceptor的区别
前言 最近在面试的时候,被问到了这个问题,觉得答得不是很好,在此进行整理和记录,供自己学习,也希望能帮助到大家. 什么是Filter 在java的javax.servlet下有一个接口Filter.任 ...
- filter listener interceptor的区别
转自: http://www.cnblogs.com/shangxiaofei/p/5328377.html https://www.cnblogs.com/jinb/p/6915351.html 一 ...
- Filter 和 interceptor 的区别
1. 拦截器 interceptor ● 特点:interceptor 依赖于web框架,在Spring<MV中就是依赖于springMVC框架.在实现上是基于Java的反射机制,属于面向切面编 ...
- 3.Filter和interceptor的区别
https://blog.csdn.net/qq_36411874/article/details/53996873
- Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...
- 过滤器 Filter 与 拦截器 Interceptor 的区别
引言 说起 Filter 与 Interceptor 的区别,相信很多同学第一感觉就是容易.简单! 毕竟开发中这两个组件使用频率较高,用法也较简单.然后真回答起来有答不出个所以然来,场面尴尬,老丢脸了 ...
- servlet/filter/listener/interceptor区别与联系
转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...
- 过滤器(Filter)与拦截器(Interceptor)区别
过滤器(Filter)与拦截器(Interceptor)区别 过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途 ...
- 【转】servlet/filter/listener/interceptor区别与联系
原文:https://www.cnblogs.com/doit8791/p/4209442.html 一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台 ...
随机推荐
- P1081 [NOIP 2012 提高组] 开车旅行 题解
传送门 前言 爆肝到半夜,中间假了一次,最终调过了两个样例,交上去过了. 题解 思路 首先进行预处理. 用一种你喜欢的数据结构维护每个城市的海拔,容易求出从每个城市出发,小 \(A\) 和小 \(B\ ...
- pagehelper分页查询的一个坑,明明下一页没有数据了却还是返回了数据
pagehelper分页查询的一个坑,明明下一页没有数据了却还是返回了数据 解决:关闭这该死的合理化,如下配置: pagehelper:# helperDialect: mysql reasonabl ...
- 使用Bioaider进行本地blast
系统环境为windows11 1. 下载blast程序 https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ 双击安装,记住自己的 ...
- C# 超大数据量导入 SqlBulkCopy
1 public static void ImportTempTableDataIndex(DataSet ds,string TempTableName,string strSqlConnectio ...
- day4-进制与位运算
进制 对于整数有4种表现方式 二进制,满二进一 十进制,满10进1 八进制,满8进1,数字0开头 十六进制,满16进1,以0x或0X开头 进制转换 二进制转十进制 规则:从最低位开始(右边),将每位数 ...
- sap 管理--企业解决方案 -设备管理
1.什么是sap 管理 2.设备管理管的是什么 3.设备的几种状态 4.设备bom(物料清单) 5.测量点计数器 1.什么是sap 管理 System Applications and Product ...
- linux(centos)配置ipv6网卡
1.ipv6网卡配置文件和ipv4在同一个网卡配置文件中 vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置好之后重启网卡生效 2.测试
- Git Bash 无法输入中文
场景重现 有个小伙伴的电脑上 Git Bash 里死活无法输入中文, 导致 git 提交信息没法用中文写... git commit -m "无法输入中文" 解决办法 在 Git ...
- SQL语句执行慢情况
排查历史慢查询: SELECT TOP 20 [Total IO] = (qs.total_logical_reads + qs.total_logical_writes) , [Average IO ...
- 关于CH182LED配置的说明
CH182的LED配置有两种模式: 传统LED功能 该功能可通过页7寄存器19控制bit 3-5控制 使用时可将页7寄存器19 bit3 置0 通过bit4-5实现不同模式,默认情况下bit3为0,b ...