在使用SpringBoot开发过程中,有时遇到一些场景需要编写Filter过滤器来完成,当SpringBoot内置过滤器和我们写的过滤器在同时起作用的时候,了解每个过滤器的执行顺序对我们开发、解决问题很有帮助,接下来就给大家介绍下怎么分析自己的SpringBoot工程中每个过滤器的执行顺序~
- SpringBoot版本 2.4.5
使用方式
- 使用IDE打开SpringBoot工程,修改application.yml配置文件(application.properties同理),将web日志组的日志级别调整为debug,然后启动工程并观察控制台输出
logging:
level:
web: debug
运行效果
- 通过控制台日志输出,搜索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();
}
示例写法