一、报错
java.lang.RuntimeException: java.io.IOException: Invalid keystore format
Caused by: java.io.IOException: Invalid keystore format
二、原因
原因:Java的密钥库jks文件放在/src/main/resources目录下,编译后jks文件被修改,导致keyStore.load读取keystore文件异常
导致报错的pom.xml配置:
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<resource>
filtering:表示是否启用资源文件的过滤功能
设置true可以替换文件中的 ${…} 占位符为具体的值(java开发在pom.xml配置多环境使用到);设置false,则禁止对这些文件进行过滤处理。
多环境配置需要替换文件中的占位符(如 ${server.port})为具体的值。这对于配置文件是非常有用的,但对于二进制文件(如 oauth2.jks)会导致格式错误。
对于 oauth2.jks 特殊二进制文件,应该禁用 Maven 的资源过滤功能,以免在构建过程中修改文件内容,导致格式错误。
三、解决方法
解决方法一:JKS特殊二进制文件不放在resource目录下
解决方法二:使用绝对路径访问文件(全路径,如D:\oauth2.jks)
使用绝对路径访问oauth2.jks 是可以的,使用相对路径访问到是编译之后的文件
解决方法三:仅对oauth2.jks 文件不设置资源过滤,兼容多环境设置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--第一个 resource 禁用了过滤功能,适用于 oauth2.jks 这类二进制文件-->
<filtering>true</filtering>
<excludes>
<exclude>oauth2.jks</exclude>
</excludes>
</resource>
<!--第二个 resource 启用了过滤功能,并排除了 oauth2.jks,确保其他配置文件能够正常替换占位符-->
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>oauth2.jks</include>
</includes>
</resource>
</resources>
</build>
maven clean一下,选中pom.xml 重新加载
或者rebulid都行
再次运行就能正常访问了
借鉴参考:
1、GPT问答
2、Java的密钥库jks文件放在/src/main/resources目录下报错的解决办法