SpringBoot过滤器的实现
1、过滤器与拦截器的区别
①:拦截器是基于java的反射机制的,而过滤器是基于函数的回调。
②:拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
③:拦截器只对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④:拦截器可以访问action上下文、值、栈里面的对象,而过滤器不可以。
⑤:在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥:拦截器可以获取IOC容器中的各个bean,而过滤器不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
2、过滤器的调用
过滤器是在前端向controller层发请求之前被调用过滤器的调用分为三个步骤,
init : filter对象只会创建一次,init方法也只会执行一次。
doFilter : 主要的业务代码编写方法,可以多次重复调用
destroy : 在销毁Filter时自动调用(程序关闭或者主动销毁Filter)
其中doFilter的调用最为主要。
3、过滤器的设置规则
@Order(1):表示过滤器的顺序,假设我们有多个过滤器,你如何确定过滤器的执行顺序?这个注解就是规定过滤器的顺序。
如果不指定Order的话,会默认按照filterName的首字母(A、B、C...Z)进行排序;
注意:
启动类中增加注解,自动注册Filter
@ServletComponentScan :在SpringBootApplication上使用@ServletComponentScan注解后,
Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。
4、过滤器的实现
4.1、过滤器的引入
引入spring-boot-starter-web 在pom.xml 中引入spring-boot-starter-web包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.2过滤器的建立
这里需要注意的是,urlPatterns是需要过滤的请求地址,这里我写的是urlPatterns = "/staff/info/*,那这个过滤器过滤的是RequestMapping=@RequestMapping("/staff/info")下面的所有方法,
也就是一个controller层,如果想过滤所有数据就这样写:urlPatterns = "/*。