有时候项目需要一些文件才可以正常运行,最近就有一个这样的项目,需要读取公钥进行加密,读取私钥进行解密,那么如何读取这些文件呢?
0. 最简单的方式
最先想到的就是把文件放在服务器上,并记录存放路径,把路径写在配置文件中,项目运行时从配置文件中的路径读取文件。
这样做固然可行,但是对需要交付给不同客户的项目来说会有几个问题:
- 增加了项目交付步骤,交付人员每次多了存放文件并记录、修改配置的步骤;
- 人工操作使得失误几率增大,如果路径配置出错,那么会导致项目运行报错。
综上,还是选择将文件放在resources目录下,整体打成jar包或war交付给客户。
1. SpringBoot读取资源文件的方式
这里推荐一篇文章:Java项目读取resources资源文件路径那点事
这篇文章的内容这里就不再赘述,参考着这篇文章,本人使用了其中提到的:
InputStream in = this.getClass().getResourceAsStream("/key/keystore.keystore");
使用流的方式,读取到了文件。
2. 重点注意事项
但是此时遇到了一个问题,加解密老是失败,报密钥不对,经一些列调查后发现,原来的resources
文件夹下为了配置使用多环境,在maven的pom.xml中将<filtering>
设置为了true
,以使得资源文件被复制到目标目录的同时,可以替换其中的标识符。但是这样一来,就将密钥文件也进行了修改,所以需要在pom.xml中加入以下修改:
<build>
……
<resources>
……
<resource>
<directory>src/main/resources</directory>
<includes>
<include>key/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
将resources/key
目录下的文件不进行替换。
至此,运行成功撒花🎉
评论区