我已经看到了有关访问 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
最佳答案
这并不像给出文件的路径那么简单,因为当它被打包到 jar 中时,它并不是一个真正的文件。您可以提供KeyStore
然而,SslConfigurator 的对象,这比指定路径更灵活,因为它可以从任何输入源初始化,包括 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");
关于java - 如何使用jar文件中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021806/