提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本章节主要介绍过滤器、拦截器的使用和区别。
提示:以下是本篇文章正文内容,下面案例可供参考
一、两者定义和区别
关于过滤器和拦截器的区别如下:
- 作用域差异:Filter是Servlet规范中规定的,只能用于WEB中,拦截器既可以用于WEB,也可以用于Application、Swing中(即过滤器是依赖于Servlet容器的,和它类似的还有Servlet中的监听器同样依赖该容器,而拦截器则不依赖它);
- 规范差异:Filter是Servlet规范中定义的,是Servlet容器支持的,而拦截器是Spring容器内的,是Spring框架支持的;
- 资源差异:拦截器是Spring的一个组件,归Spring管理配置在Spring的文件中,可以使用Spring内的任何资源、对象(可以粗浅的认为是IOC容器中的Bean对象),而Filter则不能使用访问这些资源;
- 深度差异:Filter只在Servlet前后起作用,而拦截器可以深入到方法的前后、异常抛出前后等更深层次的程度作处理(这里也在一定程度上论证了拦截器是利用java的反射机制实现的),所以在Spring框架中,优先使用拦截器;
二、使用方式
1.过滤器
在SpringBoot中使用过滤器的步骤:
- 先定义自定义过滤器类,并实现javax.servlet.Filter类,还可以继承org.springframework.web.filter.GenericFilterBean类(该类实现了javax.servlet.Filter,并预定义一些函数、参数)。
- 注册到Spring的IOC容器中,由Spring
统一管理。实现方式可以在自定义过滤器类中添加@Component注解,或者在启动配置类中添加bean方法。
@Component
public class TokenFilter implements Filter {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("TokenFilter:开始执行");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("TokenFilter:结束执行");
}
}
若有多个过滤器,并想通过自定义顺序执行这些过滤器(默认顺序是按照英文字符a-z排序),可以如下实现:
- 先定义自定义过滤器类,并实现javax.servlet.Filter类&#x