当前位置:   article > 正文

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

切面和filter什么区别

目录

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启动而进行初始化

使的场景

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/342099
推荐阅读
相关标签
  

闽ICP备14008679号