java - Spring访问 keystore 文件

标签 java spring maven tomcat

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

当处理 keystore 文件然后放置在 "%JAVA_HOME%\bin\keytool" 中时,这是正确的约定吗?

目前在我做的资源目录中访问 keystore 文件:

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();
}

最佳答案

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

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

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

关于java - Spring访问 keystore 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46490326/

相关文章:

java - 方面j : deploying aspects in an existing web application

java - Java中\G边界匹配器的使用

java - 访客详情问题 java 中的 IO 文件处理

java - 我可以创建一个生成多个可执行 Jars 的 Eclipse 项目吗?

java - 找不到 Apache Commons/lang/StringUtils

java - 我应该如何在java项目中配置MongoDB?

spring - 如何将旧的 Struts 应用程序与 Spring 3.x 集成

java - hibernate : Column count doesn't match value count at row 1

java - AspectJ 没有编译

Java swagger 与 JaxRS 抛出错误