一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

目录

Filter过滤器

作用

应用场景

拦截器Interceptor

Aspect切片

三者对比

执行顺序

拦截层面

过滤器Filter和拦截器Interceptor的区别


Filter过滤器

  • Filter 过滤器它是 JavaWeb 的三大组件之一
    • 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  • Filter 过滤器它是 JavaEE 的规范
  • Filter随web应用的启动而启动,只初始化一次,随web应用的停止而销毁
  • 过滤器通过实现Filter接口,实现了过滤器的三个方法,分别是’初始化方法’,‘dofilter方法’和’销毁方法’

作用

过滤器可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出过滤操作。

使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。

应用场景

  • 权限检查
  • 日记操作
  • 事务管理
  • ......

拦截器Interceptor

一个应用中可以定义多个拦截器,spring在项目启动时,会将这些拦截器注册进来,并按照默认规则进行排序。如果是自定义的拦截器,可手动设置拦截器调用的先后顺序。

各拦截器是链式调用,一个请求可以触发多个拦截器,每个拦截器的调用会按照它加载到spring中的顺序依次执行。

拦截器中有3个方法,功能如下:

  • preHandle:该方法在调用Controller方法或获取静态资源前被调用(静态资源包括html、js等)。
  • postHandle:该方法在调用Controller方法或获取静态资源后,但是视图还没有被渲染前调用。
  • afterCompletion:该方法在视图渲染后进行调用,主要用来清除资源。

Aspect切片

AOP操作可以对操作进行横向的拦截,最大的优势在于他可以获取执行方法的参数,对方法进行统一的处理。常见使用日志,事务,请求参数安全验证等,可以使用@Aspect标记为切面类,使用@Pointcut和@Around、@Before、@After、@AfterReturning、@AfterThrowing来确定拦截位置

三者对比

执行顺序

拦截层面

  • 过滤器Filter和拦截器Interceptor属于请求层面的拦截
  • 切面Aspect属于方法层面的拦截

过滤器Filter和拦截器Interceptor的区别

区别过滤器Filter拦截器Interceptor
实现原理函数回调Java反射机制
适用范围servlet的规范,只能用于web程序spring框架支持, 既可以应用在web程序中,也可以应用在非web程序中
粒度Filter只能在servlet的前后起作用拦截器能在方法前后异常前后执行,更加灵活,粒度更小,spring框架程序优先使用拦截器
初始化时机随着Tomcat等web容器启动时而进行初始化随着spring启动而进行初始化

使的场景

实现通用功能过滤(敏感词过滤、字符集编码设置、响应数据压缩等功能)实现项目中的业务判断(登录判断、权限判断、日志记录等)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值