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