过滤器和拦截器的区别

过滤器(Filter)的使用:https://blog.csdn.net/reggergdsg/article/details/52821502
doFilter和doFilterInternal的区别:https://www.jianshu.com/p/3d9b4cfe1a62
拦截器 Interceptor 的使用:https://blog.csdn.net/qq_35246620/article/details/68487904

AOP是一种将业务逻辑提取出来,以实现代码复用,易于维护的方式,拦截器是它的一种具体实现,aspectJ也是一种具体实现,但拦截器具有代码侵入性,aspectJ具有相比更低的侵入性,更好,易于维护

根据以上代码事实可以确认的是,
1、大量的请求块信息处理使用filter, 特别的内部逻辑处理所使用aspect
2、filter是servlet级别的,不属于spring aspect和interceptor属于spring框架
3、filter配置在web.xml中 interceptor配置在spring配置文件中
4、filter的作用范围中可以包含aspect和interceptor

拦截器与过滤器使用场景:

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

具体区别

拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式完成。
区别:
(1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。
(2)拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
(3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能。
(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
在这里插入图片描述
两者的本质区别:从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

执行顺序
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值