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规则配置。


相关文章
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
1053 4
如何在SpringBoot项目中使用过滤器和拦截器
|
Java Spring 容器
【二十二】springboot整合拦截器实战并对比过滤器
【二十二】springboot整合拦截器实战并对比过滤器
424 0
|
Java Spring
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
1453 0
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
1246 0
|
人工智能 安全 Java
Spring Boot 过滤器 拦截器 监听器
本文介绍了Spring Boot中的过滤器、拦截器和监听器的实现与应用。通过Filter接口和FilterRegistrationBean类,开发者可实现对请求和响应的数据过滤;使用HandlerInterceptor接口,可在控制器方法执行前后进行处理;利用各种监听器接口(如ServletRequestListener、HttpSessionListener等),可监听Web应用中的事件并作出响应。文章还提供了多个代码示例,帮助读者理解如何创建和配置这些组件,适用于构建更高效、安全和可控的Spring Boot应用程序。
966 0
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
800 1
|
存储 Java API
简单两步,Spring Boot 写死的定时任务也能动态设置:技术干货分享
【10月更文挑战第4天】在Spring Boot开发中,定时任务通常通过@Scheduled注解来实现,这种方式简单直接,但存在一个显著的限制:任务的执行时间或频率在编译时就已经确定,无法在运行时动态调整。然而,在实际工作中,我们往往需要根据业务需求或外部条件的变化来动态调整定时任务的执行计划。本文将分享一个简单两步的解决方案,让你的Spring Boot应用中的定时任务也能动态设置,从而满足更灵活的业务需求。
1361 4
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
636 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
Java API 数据安全/隐私保护
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
807 6
|
Java Spring
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
在Spring Boot中,可以通过控制`@PostConstruct`注解方法的执行顺序来实现初始化时的顺序控制
1637 1