filter和handlerInterceptor的各个方法执行的排序

Filter和HandlerInterceptor的方法执行顺序如下:

  1. Filter
  • 在请求进入Servlet容器之前,先经过Filter的过滤器链。
  • Filter的init()方法只会在容器启动时执行一次。
  • Filter的doFilter()方法是每次请求都会执行的,如果需要放行请求,需要调用FilterChain的doFilter()方法。
  • Filter的destroy()方法只会在容器关闭时执行一次。
  1. HandlerInterceptor
  • 在请求进入Controller之前,先经过HandlerInterceptor的拦截器链。
  • HandlerInterceptor的preHandle()方法在Controller方法执行之前执行,如果返回false,则请求结束,不会进入Controller方法。
  • Controller方法执行完毕后,会按照拦截器链的反向顺序执行HandlerInterceptor的postHandle()方法。
  • 在响应返回给客户端之前,会按照拦截器链的反向顺序执行HandlerInterceptor的afterCompletion()方法。

总的来说,Filter的执行顺序在HandlerInterceptor之前,而HandlerInterceptor的执行顺序是在请求进入Controller之前和Controller方法执行完毕后。

`Filter`和`HandlerInterceptor`都是用于拦截请求并处理的技术,它们的作用类似,但在实现上有一些区别和优势。 **区别:** 1. `Filter`是基于`Servlet`规范实现的,而`HandlerInterceptor`是基于`Spring MVC`框架实现的。 2. `Filter`依赖于`Servlet`容器,因此在过滤器链中的所有过滤器都会被执行,而`HandlerInterceptor`只会在`Spring MVC`的请求处理链中执行。 3. `Filter`的生命周期由`Servlet`容器管理,而`HandlerInterceptor`的生命周期由`Spring MVC`框架管理。 4. `Filter`可以拦截所有类型的请求,包括静态资源请求,而`HandlerInterceptor`只能拦截`Controller`中定义的请求。 **优势:** 1. `Filter`可以拦截所有类型的请求,因此可以对所有资源进行过滤和处理,比如:字符编码、防止XSS攻击等操作。 2. `HandlerInterceptor`只拦截`Controller`中定义的请求,因此可以对请求进行更加细粒度的控制,比如:用户认证、权限控制等操作。 3. `HandlerInterceptor`可以访问`Spring MVC`中的一些核心对象,比如:`HandlerMethod`、`ModelAndView`等对象,可以方便地对请求进行处理和修改。 4. `Filter`可以在`web.xml`中配置,因此可以更加灵活地进行配置和管理。 综上所述,`Filter`和`HandlerInterceptor`都是用于拦截请求并处理的技术,它们的作用类似,但在实现上有一些区别和优势。在实际应用中,可以根据具体的需求和场景选择合适的技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值