在 Spring 框架中,过滤器、拦截器和 AOP(面向切面编程)是处理请求的三种机制,它们的执行顺序如下:
- 过滤器 (Filter)
执行时机: 过滤器在请求到达 Spring 的 DispatcherServlet 之前执行。
作用: 可以对请求和响应进行预处理,通常用于日志记录、请求/响应编码、CORS 处理等。
实现: 通过实现 javax.servlet.Filter 接口。 - 拦截器 (Interceptor)
执行时机: 拦截器在请求到达控制器之前执行(在 DispatcherServlet 内部),也可以在控制器返回结果后执行。
作用: 可以在调用控制器方法之前和之后进行处理,通常用于权限检查、登录状态验证等。
实现: 通过实现 HandlerInterceptor 接口。 - AOP (Aspect-Oriented Programming)
执行时机: AOP 切面可以在方法调用之前、之后或抛出异常时执行,具体取决于切点定义。
作用: 用于横切关注点(如事务管理、日志记录、性能监控等),可以应用于多个控制器或服务。
实现: 通过使用 Spring AOP 提供的注解(如 @Aspect、@Before、@After 等)或者 XML 配置。
执行顺序总结
过滤器:请求最初会被过滤器处理。
拦截器:在过滤器之后,请求会进入拦截器的处理逻辑。
AOP:在控制器方法被调用时,AOP 切面会根据定义的切点触发。
示例顺序
请求到达应用 -> 过滤器 -> 拦截器 -> 控制器 -> AOP 切面(如果适用) -> 返回结果 -> 拦截器(后置处理) -> 过滤器(响应处理)
在实际的执行流程中,当请求到达Servlet容器时,首先会触发过滤器(Filter)进行预处理。然后,请求被DispatcherServlet捕获,并触发拦截器(Interceptor)的preHandle方法进行拦截。如果preHandle方法返回true,则请求会继续传递给下一个拦截器或控制器方法;如果返回false,则请求会被拦截,并直接执行拦截器的afterCompletion方法。在控制器方法执行之前或之后,拦截器的postHandle和afterCompletion方法会按顺序执行。最后,如果定义了AOP切面,它们会
在相应的时机(如方法执行前或后)被触发。
1328

被折叠的 条评论
为什么被折叠?



