我正在尝试使用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
这很好用,我猜这是应该做的方式,而不是使用文件名。