在Spring框架中,有一些常用的过滤器和拦截器,它们的执行顺序如下:
过滤器(Filter)的执行顺序:
CharacterEncodingFilter:设置请求和响应的字符编码。
HiddenHttpMethodFilter:将POST请求转换为对应的HTTP方法。
HttpPutFormContentFilter:将PUT请求中的表单数据包装成请求参数。
RequestContextFilter:将请求上下文绑定到当前线程。
FormContentFilter:将请求体中的表单数据包装成请求参数。
MultipartFilter:处理请求中的文件上传。
OpenEntityManagerInViewFilter:将EntityManager与当前线程绑定,用于实现Open EntityManager in View模式。
DelegatingFilterProxy:委托给另外一个过滤器进行处理。
拦截器(HandlerInterceptor)的执行顺序:
HandlerInterceptor的preHandle方法:在Controller方法执行前执行的拦截器逻辑。
Controller中的方法:执行具体的请求处理逻辑。
HandlerInterceptor的postHandle方法:在Controller方法执行后、视图渲染前执行的拦截器逻辑。
视图渲染:将模型数据渲染到视图中。
HandlerInterceptor的afterCompletion方法:在视图渲染完成后执行的拦截器逻辑。
需要注意的是,拦截器的执行顺序是根据配置的顺序来确定的。如果有多个拦截器,可以通过实现WebMvcConfigurer接口,重写addInterceptors方法来指定拦截器的顺序。
此外,过滤器和拦截器的执行顺序是在请求处理流程中的不同阶段进行的。过滤器在请求进入Servlet容器之前和响应返回客户端之前执行,而拦截器在Controller方法执行前和视图渲染前后执行。因此,过滤器可以对所有请求进行过滤处理,而拦截器只能对Spring MVC请求进行拦截和处理。