栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Springboot加载resources资源文件出现Invalid keystore format错误和踩坑记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot加载resources资源文件出现Invalid keystore format错误和踩坑记录

文章目录
  • 前言
  • 一、maven 标签使用
  • 二、maven打包资源文件踩坑记录
    • 1.背景
    • 2.坑点
    • 3.解决办法
  • 总结


前言 springboot工程中,会有需要将一些资源文件例如excel,xml等配置文件放到resource目录下,方便代码中进行读取,而使用maven打包时,可通过resource标签来配置资源文件是否需要被打入jar包,以及文件中的占位符是否需要过滤
一、maven 标签使用

转载 https://www.cnblogs.com/luweiweicode/p/14282017.html

二、maven打包资源文件踩坑记录 1.背景

在springboot项目中,需要调用外部系统接口,而接口采用https方式访问,所以需要将目标url的https证书加载到项目中。本项目中,将证书cer文件放到工程的resource目录下,如图:

至于如何将证书加载到jdk中,以及如何生成证书和代码中使用证书,这里不再赘述,网上很多方法,可参考以下链接:
https://blog.csdn.net/fengbird/article/details/89462295

2.坑点

当我愉快地启动工程运行时,发现系统无法加载xx.keystore文件,提示

Invalid keystore format

显然,keystore文件有问题,网上搜了一番,有人提出生成keystore文件使用的java版本必须和工程运行的java版本保持一致,这是个需要注意的地方,但本人的问题并不是这个。

然后又看到有人说是因为maven打包的将资源文件修改所导致,故我将keystore文件放到工程外部,通过文件读取方式加载,果然问题就解决了。

通过对比可以发下,打包后的keystore文件大小竟然和打包前keystore文件大小不一致!说明打包的时候将keystore文件修改了,所以程序加载的时候当然要报错了!

虽然解决了燃眉之急,但是把文件放在外部,引用始终存在不方便,如果部署到多个服务器岂不是要上传多次文件,配置不同的路径。为了彻底解决这个问题,就需要研究maven的打包方式


3.解决办法

先抛出正确的maven配置:



这里重点说下filtering ,include和exclude三个标签的用法,看了网上很多资料,都说的不是很全面或者模棱两可。
首先,filtering为true表示开启过滤,表示maven打包时会替换资源文件中的占位符,比如我们常用的application.yml中的@spring.active@ 环境变量占位符就会被替换成真实变量。如果filtering为false,表示关闭过滤,表示不对文件进行占位符替换。
重点来了!
上图中,第一个resource标签中,如果不配置includes和excludes,表示所有文件都会被过滤且打包到classpath下。而配置了 keys/** ,则表示不过滤keys目录下的所有文件,
但也不会将文件打包到classpath下。所以,如果不写第二个resource标签,则xx.keystore文件就不会出现在打包文件中!
如果只写第二个配置会怎么样呢,也不行,第二个配置关闭了过滤,且只打包keys目录,意味着其他的例如application.yml不会被替换占位符也不会被打包,显然不对。

第二个resource标签filtering为false,表示不需要过滤但是需要打包,对哪些不过滤但是要打包呢,使用
keys/** ,表示keys目录不过滤,但是要打包。
所以,综合两个配置,第一个配置 keys目录不过滤也不打包,第二个配置 keys目录不过滤但要打包,得出keys目录不过滤但要打包。

这几个标签理解起来比较绕,大概就是这个意思,如果你想排除某些资源文件不被过滤,就得配合两个resource标签一起使用

总结

1.如果遇到证书在代码里加载错误,主要考虑两点,一是否采用同样的java版本生成证书和运行工程,二是如果使用了maven打包,是否被maven进行过滤导致文件被修改;

2.springboot中经常会有将资源文件或者其他配置文件放到resources目录下供代码内部引用,有时候莫名其妙遇到文件打不开或者打开错误,都有可能是maven打包过滤的问题。在实际开发中,遇到过将excel模板文件放入resources目录下,没有排除maven打包过滤,导致打包时被修改,文件无法读取的情况时常发生,故写下此篇博客记录,防止后续继续踩坑。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/281118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号