我编写了一个双向自定义restful服务cleint,用于在https端口8443上使用安全的restful服务。下面是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不能解析为绝对文件路径,因为它不驻留在文件系统:org.springframework.web.client.RestTemplate中:
我也试过
爪哇-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
也得到了同样的例外。任何帮助都是非常感谢的。
发布于 2019-02-06 10:33:45
尝试使用resource.getInputStream()而不是resource.getFile() as,Spring中的resource.getFile()尝试访问文件系统路径,但它无法访问JAR中的路径
示例示例:
Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");
InputStream dbAsStream = resource.getInputStream();你有没有使用完整的路径
-Djavax.net.ssl.trustStore=something/like/this/truststore.jkshttps://stackoverflow.com/questions/54547243
复制相似问题