美文网首页
怎么查看SpringBoot工程中每个过滤器的执行顺序

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

作者: 向上生长之路 | 来源:发表于2021-10-08 20:42 被阅读0次

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

    • SpringBoot版本 2.4.5

    参考官方文档: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
    • 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

    相关文章

      网友评论

          本文标题:怎么查看SpringBoot工程中每个过滤器的执行顺序

          本文链接:https://www.haomeiwen.com/subject/dmftoltx.html