我在jar主题中看到了有关访问资源的其他问题,但我的问题有点不同。 我需要在我的代码中使用.jks文件为我正在编写的客户端访问web服务。这个代码在我的系统中完美运行,即使我将它打包为jar但是当我将jar发送给另一个人时它会收到SSL错误。我知道它在我的代码中硬编码时无法访问文件。即使我在jar中添加文件也是如此。
任何人都可以告诉我如何在jar中访问此文件。我不需要在这里使用文件阅读器或缓冲阅读器,因为我只需要提供文件的路径。
提前致谢
SslConfigurator sslConfig = SslConfigurator.newInstance()
.trustStoreFile("AAAWSKeyStore.jks")
.trustStorePassword("password")
.keyStoreFile("AAAWSKeyStore.jks")
.keyPassword("password")
.securityProtocol("TLS");
此处抛出的错误是
jjava.lang.IllegalStateException: Cannot find key store file ".\AAAWSKeyStore.jks
".
at org.glassfish.jersey.SslConfigurator.createSSLContext(SslConfigurator
.java:679)
at GuiAAAWS.sendPost(GuiAAAWS.java:220)
at GuiAAAWS.OkActionPerformed(GuiAAAWS.java:198)
at GuiAAAWS.access$2(GuiAAAWS.java:193)
at GuiAAAWS$3.actionPerformed(GuiAAAWS.java:88)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener
答案 0 :(得分:2)
它并不像给出文件的路径那么简单,因为当它被包装在jar中时它不是真正的文件。但是,您可以向SslConfigurator提供KeyStore
对象,这比指定路径更灵活,因为它可以从任何输入源初始化,包括jar中的资源:
KeyStore keyStore = KeyStore.getInstance("jks");
try (InputStream in = YourClassName.class.getResourceAsStream("AAAWSKeyStore.jks")) {
keyStore.load(in, "password".toCharArray());
}
SslConfigurator sslConfig = SslConfigurator.newInstance()
.trustStore(keyStore)
.keyStore(keyStore)
.securityProtocol("TLS");