java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Boot拦截器Interceptor与过滤器Filter

Spring Boot拦截器Interceptor与过滤器Filter实战指南

作者:茶杯梦轩

本文给大家介绍Spring Boot拦截器Interceptor与过滤器Filter实战指南,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、核心概念与原理对比

1. 技术规范层级

2. 生命周期与作用范围

特性FilterInterceptor
初始化时机Web应用启动时初始化首次请求触发时初始化
作用范围所有Web资源(Servlet、静态资源)仅Spring MVC的Controller请求
执行阶段Servlet处理前后Controller方法执行前、后及视图渲染后 

3. 执行流程顺序

HTTP请求 → Filter链 → DispatcherServlet → Interceptor.preHandle → Controller处理 → Interceptor.postHandle → 视图渲染 → Interceptor.afterCompletion → Filter链返回响应

二、使用场景与选型策略

1. 优先选择Filter的场景

@WebFilter("/*")
public class LogFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
        long start = System.currentTimeMillis();
        chain.doFilter(req, res); // 必须放行请求
        System.out.println("耗时:" + (System.currentTimeMillis() - start));
    }
}

2. 优先选择Interceptor的场景

@Component
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
        if (req.getSession().getAttribute("user") == null) {
            res.sendRedirect("/login");
            return false; // 中断请求
        }
        return true;
    }
}

3. 混合使用场景

三、实现步骤与配置指南

1. Filter开发步骤

  1. 实现Filter接口 重写doFilter方法,注意调用chain.doFilter()放行请求 。
  2. 注册方式
    • 注解方式@WebFilter(urlPatterns="/*")(需主类加@ServletComponentScan
    • 配置类方式(推荐):
@Bean
public FilterRegistrationBean<LogFilter> logFilter() {
    FilterRegistrationBean<LogFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new LogFilter());
    bean.setOrder(1); // 优先级
    bean.addUrlPatterns("/*");
    return bean;
}

2. Interceptor开发步骤

  1. 实现HandlerInterceptor接口 重写preHandlepostHandleafterCompletion三阶段方法 。
  2. 注册拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login", "/static/**");
    }
}

四、常见问题与避坑指南

1. 执行顺序问题

2. 配置路径陷阱

3. Spring上下文依赖

4. 请求阻塞问题

五、总结与选型建议

维度Filter优势Interceptor优势
技术栈兼容所有Java Web项目深度整合Spring生态
性能更接近底层,处理速度快可访问Spring上下文,业务逻辑处理更便捷
灵活性全局处理能力强支持细粒度控制(如按Controller方法拦截)

选型口诀

通过合理搭配Filter与Interceptor,可构建高效、安全的Web应用。建议在复杂项目中结合使用,发挥各自优势,如Filter处理全局基础设施,Interceptor处理业务逻辑

到此这篇关于Spring Boot拦截器Interceptor与过滤器Filter实战指南的文章就介绍到这了,更多相关Spring Boot拦截器Interceptor与过滤器Filter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文