从Maven jar引用JSSE的密钥库文件

时间:2016-06-25 11:06:08

标签: java maven jar resources jsse

我正在尝试使用JSSE for SSL套接字编写一个简单的客户端/服务器应用程序。 我已经为服务器生成了自己的'手工'证书和keytool,我必须设置属性'keystore'如下:

System.setProperty("javax.net.ssl.keyStore","/keystore.ks");

问题如下:

据我所知,setProperty只需要文件名,而不是文件本身。 从IDE可以正常工作,如果我使用文件的路径(即src / main / resources / keystore.ks,使用标准的maven目录结构) 在我用maven构建JAR之后出现了这个问题。无法找到资源。

我知道资源文件是在JAR的根目录中复制的,但我没有找到任何方法来获取正确的文件名以提供给setProperty。

我也试过

String pathKeystore=Server.class.getResource("/keystore.ks").getPath();

以及.toString()。toExternalForm()等。但是,如果稍后我使用此字符串setProperty,它都不起作用。 在查看其他问题时,我看到路径名通常不用于资源,而是只读取文件,但在我的情况下我需要字符串。

自从我对Maven不熟悉以来,我对自己所做的事情没有很好的理解,但基本上我的问题总结如下:

如何在maven构建的JAR文件中获取要用作setProperty方法的String的资源文件的正确路径名?

提前感谢所有人。

编辑: 我还考虑在运行时设置属性: 我用

启动了我的罐子
java -Djavax.net.ssl.keyStore=keystore.ks -jar my_jar.jar

我仍然在代码中设置了这个密钥库的密码,因为我对此路径没有问题。

我想补充一点,我在自己的客户端上遇到了同样的问题,我必须手动添加trustStore,然后用

启动它
java -Djavax.net.ssl.trustStore=jssecacerts -jar my_client_jar.jar

这很好用,我猜这是应该做的方式,而不是使用文件名。

0 个答案:

没有答案