过滤器、拦截器、aop的特点

过滤器

介绍

java为我们提供了一个Filter接口,我们只需要实现这个接口就能实现自定义过滤器,然后添加一些必要的配置让过滤器生效。过滤器只能初始化一次,并且过滤器只会在项目停止或者是重新部署的时候才销毁。我们可以实现的这个Filter接口,里面最重要的是一个doFilter方法,当我们编写好Filter,并配置好对那个URL资源进行拦截时,每一次请求这个资源之前就会调用这个doFilter方法。并且在这个doFilter方法里面也有着一个FilterChain的对象参数 ,这个对象里面也有一个doFilter方法,是否调用这个方法决定了这个过滤器是否能调用后面的资源或者是执行后面的过滤器。也就是相当于目标资源。所以在过滤器里面可以进行一些什么操作呢?可以在调用目标资源之前,进行权限等的处理;判断是否调用目标资源;也可以在调用目标资源之后进行一些响应消息进行处理。

功能
  • 统⼀设置编码
  • 过滤敏感字符(防止sql注入)
  • 登录校验
  • URL级别的访问权限控制
  • 数据压缩
  • 修改请求头实现跨域请求
生命周期

Filter的创建和销毁由WEB服务器负责。

  • web应用程序启动时,web服务器将创建Filter 的实例对象,然后调用Filter的init()方法。【只在程序启动时调用一次。】
  • 访问请求如果符合拦截条件都会调用doFilter()方法;【在init()初始化后。】
  • 不管第几次,都在调用doGet(),doPost()【在doFilter()方法之后,在调用方法之前】。
  • 程序停止调用Filter的destroy()方法。【只在程序停止时调用一次。】

拦截器

介绍

拦截器是Spring框架中的一种特殊组件,用于拦截处理器的执行过程,可以在处理器执行前后进行一些自定义的处理。拦截器通常用于实现日志记录、权限验证、性能监控等功能。

在Spring框架中,拦截器是基于AOP(面向切面编程)的一种实现,它通过代理机制在目标方法执行前后织入自定义的逻辑。拦截器可以应用于Spring MVC框架中的控制器处理过程,也可以应用于Spring框架中的其他组件。

功能
  • ⽇志记录
  • 权限校验
  • 登录校验
  • 性能检测[检测⽅法的执⾏时间]
  • 其实拦截器和过滤器很像,有些使⽤场景。⽆论选⽤谁都能实现。需要注意的使他们彼此的使⽤范围,触发机制。
生命周期

拦截器的生命周期由Spring容器管理,它会在Spring容器启动时进行初始化,并在Spring容器关闭时进行销毁。

切面(AOP)

  • 更加精确细致的业务场景

AOP与过滤器、拦截器的区别

过滤器,拦截器拦截的是URL。
AOP拦截的是类的元数据(包、类、方法名、参数等)。

  • 过滤器并没有定义业务用于执行逻辑前、后等,仅仅是请求到达就执行。
  • 拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。
  • AOP针对具体的代码,能够实现更加复杂的业务逻辑。

三者功能类似,但各有优势,从过滤器–>拦截器–>切面(AOP),拦截规则越来越细致。 执行顺序依次是过滤器、拦截器、切面(AOP)。

其中过滤器和拦截器的区别如下:

  • 拦截器是基于Java反射机制实现的,而过滤器是基于Servlet规范实现的。这意味着拦截器可以更方便地访问Spring容器和Spring的特性,而过滤器则更加独立,不依赖于Spring。

  • 在使用上,拦截器是通过实现HandlerInterceptor接口来创建的,并且可以细粒度地控制拦截路径。而过滤器是通过实现javax.servlet.Filter接口来创建的,并且对所有请求都生效。

  • 拦截器可以访问controller上下文、值栈里的对象,而过滤器不能访问。

    (拦截器的preHandle方法在进入controller前执行,而拦截器的postHandle方法在执行完controller业务流程后,在视图解析器解析ModelAndView之前执行,可以操控Controller的ModelAndView内容。而afterCompletion是在视图解析器解析渲染ModelAndView完成之后执行的)

    ( 过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法.当Filter被移除或服务器正常关闭时,会执行destroy方法。init 和 destory都只会执行一次)

  • 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

  • 过滤器和拦截器触发时机、时间、地方不一样。

  • 过滤器包裹住servlet,servlet包裹住拦截器。

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值