SpringBoot中过滤器如何设置执行顺序

简介: SpringBoot中过滤器如何设置执行顺序

写在前面


在SpringBoot项目开发过程中,过滤器的使用是很频繁的,但是在真实的业务场景下,经常会遇到要设置多个过滤器的情况,如此才能将不同的功能抽离开。


比如,认证校验、访问日志存储、参数预处理等一系列的框架操作。


那么遇到这种多个过滤器的情况,SpringBoot是如何来设置每个过滤器的执行顺序呢?这就是我们今天要学习的知识。


SpringBoot如何设置过滤器的执行顺序


其实SpringBoot已经提供了很方便的解决方案,只需要一个注解就可以搞定,那就是@Order(int)注解。


此注解用于修饰类,要起到设置过滤器执行顺序作用的话,还需要和@WebFilter注解配合使用。


接下来,我们来看下具体示例。


现在创建三个过滤器,分别是FirstFilter、SecondFilter、ThirdFilter。下面给出一些核心代码。


FirstFilter


@Order(1)
@WebFilter(urlPatterns = "/", filterName = "FirstFilter")
public class FirstFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("firstFilter已执行。。。。");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}


SecondFilter

@Order(2)
@WebFilter(urlPatterns = "/", filterName = "SecondFilter")
public class SecondFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("secondFilter已执行。。。。");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}


ThirdFilter

@Order(3)
@WebFilter(urlPatterns = "/", filterName = "ThirdFilter")
public class ThirdFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("thirdFilter已执行。。。。");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}


根据以上代码,我们可以得到结果是


firstFilter已执行。。。。
secondFilter已执行。。。。
thirdFilter已执行。。。。


这就是@Order注解和@WebFilter注解结合使用得到的结果,由此可见,SpringBoot中过滤器的执行顺序是可以通过@Order(int)传入是数值定义此过滤器的执行顺序,数字越小越先执行。


注意:@WebFilter注解中还有非常重要的参数,那就是urlPatterns,此参数时用来指定过滤器要过滤的URL规则配置。


相关文章
|
3月前
|
Java Spring 容器
【二十二】springboot整合拦截器实战并对比过滤器
【二十二】springboot整合拦截器实战并对比过滤器
61 0
|
3月前
|
Java Spring
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
287 0
|
4天前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
|
2月前
|
Java API 数据安全/隐私保护
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
51 6
|
2月前
|
Java Spring
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
144 1
|
1月前
|
安全 Java Spring
Spring Boot中的自定义过滤器
Spring Boot中的自定义过滤器
|
1月前
|
Java
springBoot如何设置yml文件,设置端口号
springBoot如何设置yml文件,设置端口号
|
2月前
|
安全 Java Spring
Spring Boot中的自定义过滤器
Spring Boot中的自定义过滤器
|
2月前
|
Java
springboot集成swagger2并分组全局设置Authorization
springboot集成swagger2并分组全局设置Authorization
48 0
|
3月前
|
Java 测试技术 数据库
SpringBoot启动时设置不加载数据库
SpringBoot启动时设置不加载数据库
237 0