我编写了一个 2-way authetication RESTful 服务客户端来通过 https 在端口 8443 上使用安全的 RESTful Web 服务。以下是 application.properties 的一部分:
trust.store=classpath:truststore.jks
trust.store.password=xyz123
key.store=classpath:keystore.jks
key.store.password=xyz123
下面是两种配置 RestTemplate 的方法
@Configuration
public class SSLTemplate {
@Value("${key.store}")
private String keyStore;
@Value("${key.store.password}")
private String keyStorePassword;
@Value("${trust.store}")
private String trustStore;
@Value("${trust.store.password}")
private String trustStorePassword;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {
SSLContext sslContext = SSLContextBuilder.create()
.loadKeyMaterial(ResourceUtils.getFile(keyStore), keyStorePassword.toCharArray(), keyStorePassword.toCharArray())
.loadTrustMaterial(ResourceUtils.getFile(trustStoreF), trustStorePassword.toCharArray())
.build();
...
}
@Configuration
public class SSLTemplate {
@Value("${key.store}")
private Resource keyStoreR;
@Value("${key.store.password}")
private String keyStorePassword;
@Value("${trust.store}")
private Resource trustStoreR;
@Value("${trust.store.password}")
private String trustStorePassword;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) throws Exception {
SSLContext sslContext = SSLContextBuilder.create()
.loadKeyMaterial(keyStoreR.getURL(), keyStorePassword.toCharArray(), keyStorePassword.toCharArray())
.loadTrustMaterial(trustStoreR.getURL(), trustStorePassword.toCharArray())
.build();
...
}
当我通过 bootRun 或在 Eclipse 中运行应用程序时,它们都可以工作。
但是当我使用 jar 发射器时
java -jar app.jar
我得到了以下异常。
通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiation 异常:无法实例化 [org.springframework.web.client.RestTemplate]:工厂方法“restTemplate”抛出异常;嵌套异常是 java.io.FileNotFoundException: URL 无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:file:/C:/build/libs/app.jar!/BOOT-INF/classes! /truststore.jks
我也试过
java -Djavax.net.ssl.trustStore=truststore.jks -Djavax.net.ssl.trustStorePassword=xyz123 -Djavax.net.ssl.keyStore=keystore.jks -Djavax.net.ssl.keyStorePassword=xyz123 -jar app.jar
并得到了同样的例外。任何帮助将不胜感激。