Java拦截器和过滤器的前后顺序

Spring Boot 中,过滤器(Filter)和拦截器(Interceptor) 是两种常见的请求处理机制,它们在请求生命周期中的执行顺序如下:

1. 先后顺序(请求 & 响应流)

(1)请求进入顺序

  1. 过滤器(Filter)

    • Servlet 容器 负责执行,比 Spring 更早,可用于全局请求处理。
    • 典型应用:请求日志、权限校验、编码设置、跨域处理、CSRF 过滤等。
    • 执行 doFilter() 方法,可对请求进行修改、放行或拦截。
  2. 拦截器(Interceptor)

    • Spring MVC 框架管理,在 Handler(Controller)执行前、执行后、视图渲染前都可以介入。
    • 典型应用:用户身份认证、权限验证、日志记录、数据处理等。
    • 主要执行:
      • preHandle()(Controller 方法执行前)
      • postHandle()(Controller 方法执行后,但视图未渲染)
      • afterCompletion()(整个请求完成后,适用于资源清理)
  3. 控制器(Controller)

    • 经过过滤器和拦截器后,请求最终到达 Spring MVC 的 @Controller 处理请求。

(2)响应返回顺序

请求处理完成后,响应的流转顺序与请求相反

  1. 拦截器(Interceptor)

    • 先执行 postHandle()(Controller 处理后,但视图未渲染)
    • 再执行 afterCompletion()(请求完全结束,可清理资源)
  2. 过滤器(Filter)

    • 过滤器的 doFilter() 方法在请求处理完毕后,执行 回溯逻辑,可用于响应头设置、日志记录、缓存控制等。

2. 总结执行顺序

请求进入

过滤器 Filter → 拦截器 preHandle → Controller 方法执行

响应返回

Controller 方法执行完成 → 拦截器 postHandle → 拦截器 afterCompletion → 过滤器 Filter

3. 示例代码

(1)自定义过滤器(Filter)

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyFilter implements Filter {
   
   
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
   
   
        Http
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值