SpringBoot面试:过滤器与拦截器有何本质区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计909个文字,预计阅读时间需要4分钟。
目录+ 实现过滤器+ 实现截断器+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 方法,具体实现代码如下:
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分钟。
目录+ 实现过滤器+ 实现截断器+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 方法,具体实现代码如下:
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过滤器 拦截器区别的资料请关注自由互联其它相关文章!

