Spring访问密钥库文件

时间:2017-09-29 13:54:23

标签: java spring maven tomcat

我目前有一个带Maven的Spring服务器,它在src/main/java/com.resource包中存储了一个带有用户私钥的KeyStore文件。问题是,当执行maven更新时,密钥库文件将被重置,因此所有私钥都将丢失。我开始研究应该放置密钥库文件的位置并找到Apaches documentation on handling keystore files但是在需要放置或获取密钥时如何从servlet代码访问该文件?因为它不在Tomcat的范围内。

这是处理密钥库文件然后放在"%JAVA_HOME%\bin\keytool"中的正确惯例吗?

目前要访问资源目录中的密钥库文件:

ApplicationContext appContext = new ClassPathXmlApplicationContext();
Resource resource = appContext.getResource("classpath:com/resources/" +fileName);
((ClassPathXmlApplicationContext) appContext).close();
InputStream inpusStream = resource.getInputStream();
KeyStore keyStore = null;
try {
    keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(inpusStream, <Password for JKS file>);
} finally {
    if (inpusStream != null)
        inpusStream.close();
}

2 个答案:

答案 0 :(得分:1)

你放入src / main / resources的任何内容都会被捆绑到jar中,就像Andrea建议的那样。但是,这也意味着,无论何时重新打包和部署jar,都会丢失对这些文件所做的任何更改,正如您所观察到的那样。

如果您在单个主机上运行服务,请将java密钥库部署到文件系统上,并通过属性通知您的Java应用程序其位置。如果您计划将其部署到群集中,您可能希望将这些密钥保存到数据库中。

另外,您知道,JAVA_HOME / bin / keytool是用于管理密钥和证书的二进制文件(例如,使用此工具创建JKS文件)。

答案 1 :(得分:0)

每个资源文件的正确位置都在'src / main / resources'下,然后在你的pom文件中放置一个资源部分,如下所示:

<build>
        <resources>
            <resource>
                <filtering>false</filtering>
                <directory>src/main/resources</directory>
            </resource>
            <resource>
                <filtering>false</filtering>
                <directory>src/main/java</directory>
                <includes>
                    <include>**</include>
                </includes>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
     ...