为什么我的Spring Boot项目不能访问静态资源?
问题源于一个客户这边自己封装的框架。
一直以来,我都对这种框架无感,因为它一般是由开源项目改编的,而且不一定是改得更好了。封装越多用起来越笨重。
由于缺少文档的原因,查原因就稍微曲折了一点。
首先我从出错信息开始
1
401 认证失败
这就有意思了,我访问一个静态资源,而且我按照所谓的文档已经关闭权限认证了。最头疼的是,这个错误信息在这个框架的自定义的错误码里面根本没有。然后我顺着代码看了个遍,终于找到了这个错误信息。他不是用的自定义的错误码,而是直接写死的,我服了…
然后debug找到原本的错误信息
1
No handler mapping for xxx
醉了,这错误多明显,为啥要改成
401 认证失败
返回呢。错误虽然明显,但是确实超过了我的经验范围,静态资源需要啥Handler呢,还是我太年轻了。不过踩一次坑涨一波经验也不亏。
最终,我在配置文件中发现了这个
1 2 3
spring: resources: add-mappings: false
这不是坑爹吗,这么多配置项中掺了一个这个,还没有任何说明。
所以原因就是因为spring.resource.add-mappings
这个被设置成false,导致WebMvcConfigurer
的addResourceHandlers
方法直接返回了,所以没有Handler处理静态资源。