温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java拦截器与过滤器区别

发布时间:2026-09-18 20:34:02 来源:亿速云 阅读:111 作者:小樊 栏目:编程语言

在 Java Web 开发中,过滤器(Filter)和拦截器(Interceptor)都用于在请求处理前后做一些通用处理,但它们的位置、作用范围、技术体系和能力有明显区别。


一、核心区别对比

对比项 过滤器 Filter 拦截器 Interceptor
所属体系 Servlet 规范 Spring MVC
作用位置 进入 Servlet 之前 / 响应之后 进入 Controller 之前 / 之后
配置方式 web.xml 或 @WebFilter Spring 配置类
能否获取 Bean ❌ 不能直接用 Spring Bean ✅ 可使用 Spring 容器
是否能中断请求 ✅ 可以 ✅ 可以
作用范围 所有请求(包括静态资源) 仅 Spring MVC 请求
执行顺序 最早 在 Filter 之后

二、执行顺序(典型流程)

请求
 ↓
Filter(过滤器)
 ↓
DispatcherServlet
 ↓
Interceptor.preHandle
 ↓
Controller
 ↓
Interceptor.postHandle
 ↓
Interceptor.afterCompletion
 ↓
Filter(响应)

三、过滤器(Filter)

特点

  • 属于 Servlet 规范
  • 在 Servlet 之前执行
  • 可以拦截 所有 HTTP 请求

常见用途

  • 字符编码设置
  • 登录校验(粗粒度)
  • 跨域处理(CORS)
  • 请求/响应日志
  • XSS / SQL 注入防护

示例

@WebFilter("/*")
public class EncodingFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }
}

四、拦截器(Interceptor)

特点

  • 属于 Spring MVC
  • 在 Controller 前后执行
  • 只能拦截 进入 DispatcherServlet 的请求

常见用途

  • 登录状态校验
  • 权限控制
  • 接口耗时统计
  • 业务日志记录
  • 参数预处理

示例

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) {
        // 登录校验
        return true;
    }
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login");
    }
}

五、怎么选?

✅ 用 Filter 的场景

  • 需要在 Servlet 前处理
  • 不依赖 Spring
  • 处理静态资源、全局请求

✅ 用 Interceptor 的场景

  • 已使用 Spring MVC
  • 需要访问 Controller、Service
  • 更细粒度的业务控制

六、一句话总结

Filter 是 Servlet 层的“门卫”,Interceptor 是 Spring MVC 层的“管家”。

如果你愿意,我也可以帮你画一张执行流程图或结合 Spring Boot 举例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手