怎么查看SpringBoot工程中每个过滤器的执行顺序

2021-10-08  本文已影响0人  向上生长之路

在使用SpringBoot开发过程中,有时遇到一些场景需要编写Filter过滤器来完成,当SpringBoot内置过滤器和我们写的过滤器在同时起作用的时候,了解每个过滤器的执行顺序对我们开发、解决问题很有帮助,接下来就给大家介绍下怎么分析自己的SpringBoot工程中每个过滤器的执行顺序~

参考官方文档:https://docs.spring.io/spring-boot/docs/2.4.5/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners-beans

使用方式

  1. 使用IDE打开SpringBoot工程,修改application.yml配置文件(application.properties同理),将web日志组的日志级别调整为debug,然后启动工程并观察控制台输出
logging:
  level:
    web: debug

运行效果

  1. 通过控制台日志输出,搜索Mapping filters快速定位到日志内容部分

    这是我工程中的输出:filterRegistrationBean urls=[/] order=-2147483647, characterEncodingFilter urls=[/] order=-2147483648, formContentFilter urls=[/] order=-9900, requestContextFilter urls=[/] order=-105, httpTraceFilter urls=[/] order=2147483637, cachingRequestBodyFilter urls=[/] order=2147483647

order值越小,优先级越高,也就是Filter越靠前执行,同Spring框架中@Order注解的解析顺序规则一致,通过日志还可以看到每个过滤器的过滤路径规则设置,能加深我们对SpringBoot工程运行机制的了解


另外在通过FilterRegistrationBean注册Filter过滤器时,可以设定过滤器顺序值,如果想将自己写的过滤器顺序调整为最高/最低优先级的话,可以通过Spring接口中的常量值来设置~
org.springframework.core.Ordered

public interface Ordered {
    int HIGHEST_PRECEDENCE = -2147483648;
    int LOWEST_PRECEDENCE = 2147483647;

    int getOrder();
}

示例写法


测试工程:https://github.com/netbuffer/spring-boot-demo

上一篇下一篇

猜你喜欢

热点阅读