SpringBoot面试:过滤器与拦截器有何本质区别?

2026-05-25 23:061阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计909个文字,预计阅读时间需要4分钟。

SpringBoot面试:过滤器与拦截器有何本质区别?

目录+ 实现过滤器+ 实现截断器+a) 过滤器+b) 截断器+实现截断器+过滤器 VS 截断器

1.出身不同

2.发展时机不同

3.实现方式不同

4.支持的项目类型不同

5.使用的场景不同

总结实现过滤器+ 实现截断器+

目录
  • 实现过滤器和拦截器
    • a) 实现过滤器
    • b) 实现拦截器
  • 过滤器 VS 拦截器
    • 1.出身不同
      • 2.触发时机不同
        • 3.实现不同
          • 4.支持的项目类型不同
            • 5.使用的场景不同
              • 总结

                实现过滤器和拦截器

                首先,我们先来看一下二者在 Spring Boot 项目中的具体实现,这对后续理解二者的区别有很大的帮助。

                a) 实现过滤器

                过滤器可以使用 Servlet 3.0 提供的 @WebFilter 注解,配置过滤的 URL 规则,然后再实现 Filter 接口,重写接口中的 doFilter 方法,具体实现代码如下:

                SpringBoot面试:过滤器与拦截器有何本质区别?

                import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @Component @WebFilter(urlPatterns = "/*") public class TestFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器:执行 init 方法。"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("过滤器:开始执行 doFilter 方法。"); // 请求放行 filterChain.doFilter(servletRequest, servletResponse); System.out.println("过滤器:结束执行 doFilter 方法。"); } @Override public void destroy() { System.out.println("过滤器:执行 destroy 方法。"); } }

                其中:

                • void init(FilterConfig filterConfig):容器启动(初始化 Filter)时会被调用,整个程序运行期只会被调用一次。用于实现 Filter 对象的初始化。
                • void doFilter(ServletRequest request, ServletResponse response,FilterChain chain):具体的过滤功能实现代码,通过此方法对请求进行过滤处理,其中 FilterChain 参数是用来调用下一个过滤器或执行下一个流程
                • void destroy():用于 Filter 销毁前完成相关资源的回收工作。

                b) 实现拦截器

                拦截器的实现分为两步,第一步,创建一个普通的拦截器,实现 HandlerInterceptor 接口,并重写接口中的相关方法;第二步,将上一步创建的拦截器加入到 Spring Boot 的配置文件中。 接下来,先创建一个普通拦截器,实现 HandlerInterceptor 接口并重写 preHandle/postHandle/afterCompletion 方法,具体实现代码如下:

                import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.gitee.com/mydb/springboot-examples/tree/master/spring-boot-filter

                总结

                过滤器和拦截器都是基于 AOP 思想实现的,用来处理某个统一的功能的,但二者又有 5 点不同:出身不同、触发时机不同、实现不同、支持的项目类型不同以及使用的场景不同。过滤器通常是用来进行全局过滤的,而拦截器是用来实现某项业务拦截的。

                以上就是SpringBoot面试突击之过滤器和拦截器区别详解的详细内容,更多关于SpringBoot过滤器 拦截器区别的资料请关注自由互联其它相关文章!

                本文共计909个文字,预计阅读时间需要4分钟。

                SpringBoot面试:过滤器与拦截器有何本质区别?

                目录+ 实现过滤器+ 实现截断器+a) 过滤器+b) 截断器+实现截断器+过滤器 VS 截断器

                1.出身不同

                2.发展时机不同

                3.实现方式不同

                4.支持的项目类型不同

                5.使用的场景不同

                总结实现过滤器+ 实现截断器+

                目录
                • 实现过滤器和拦截器
                  • a) 实现过滤器
                  • b) 实现拦截器
                • 过滤器 VS 拦截器
                  • 1.出身不同
                    • 2.触发时机不同
                      • 3.实现不同
                        • 4.支持的项目类型不同
                          • 5.使用的场景不同
                            • 总结

                              实现过滤器和拦截器

                              首先,我们先来看一下二者在 Spring Boot 项目中的具体实现,这对后续理解二者的区别有很大的帮助。

                              a) 实现过滤器

                              过滤器可以使用 Servlet 3.0 提供的 @WebFilter 注解,配置过滤的 URL 规则,然后再实现 Filter 接口,重写接口中的 doFilter 方法,具体实现代码如下:

                              SpringBoot面试:过滤器与拦截器有何本质区别?

                              import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @Component @WebFilter(urlPatterns = "/*") public class TestFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器:执行 init 方法。"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("过滤器:开始执行 doFilter 方法。"); // 请求放行 filterChain.doFilter(servletRequest, servletResponse); System.out.println("过滤器:结束执行 doFilter 方法。"); } @Override public void destroy() { System.out.println("过滤器:执行 destroy 方法。"); } }

                              其中:

                              • void init(FilterConfig filterConfig):容器启动(初始化 Filter)时会被调用,整个程序运行期只会被调用一次。用于实现 Filter 对象的初始化。
                              • void doFilter(ServletRequest request, ServletResponse response,FilterChain chain):具体的过滤功能实现代码,通过此方法对请求进行过滤处理,其中 FilterChain 参数是用来调用下一个过滤器或执行下一个流程
                              • void destroy():用于 Filter 销毁前完成相关资源的回收工作。

                              b) 实现拦截器

                              拦截器的实现分为两步,第一步,创建一个普通的拦截器,实现 HandlerInterceptor 接口,并重写接口中的相关方法;第二步,将上一步创建的拦截器加入到 Spring Boot 的配置文件中。 接下来,先创建一个普通拦截器,实现 HandlerInterceptor 接口并重写 preHandle/postHandle/afterCompletion 方法,具体实现代码如下:

                              import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.gitee.com/mydb/springboot-examples/tree/master/spring-boot-filter

                              总结

                              过滤器和拦截器都是基于 AOP 思想实现的,用来处理某个统一的功能的,但二者又有 5 点不同:出身不同、触发时机不同、实现不同、支持的项目类型不同以及使用的场景不同。过滤器通常是用来进行全局过滤的,而拦截器是用来实现某项业务拦截的。

                              以上就是SpringBoot面试突击之过滤器和拦截器区别详解的详细内容,更多关于SpringBoot过滤器 拦截器区别的资料请关注自由互联其它相关文章!