keystore.jks和truststore.jks可以';在Spring Boot应用程序中找不到
我编写了一个双向授权restful服务cleint,以通过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的两种方法keystore.jks和truststore.jks可以';在Spring Boot应用程序中找不到,spring,spring-boot,keystore,Spring,Spring Boot,Keystore,我编写了一个双向授权restful服务cleint,以通过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的两种方法 @Configurat
@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 launcer时
java-jarapp.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.keystrepassword=xyz123-jar app.jar
得到了同样的例外。任何帮助都将不胜感激。尝试使用resource.getInputStream()而不是resource.getFile(),因为在Spring中,resource.getFile()尝试访问文件系统路径,但无法访问JAR中的路径 这个链接有丰富的内容,请看一看安迪的答案 示例:
Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");
InputStream dbAsStream = resource.getInputStream();
你有完整的路径吗
-Djavax.net.ssl.trustStore=something/like/this/truststore.jks
尝试使用resource.getInputStream()代替resource.getFile(),因为在Spring中,resource.getFile()尝试访问文件系统路径,但无法访问JAR中的路径 这个链接有丰富的内容,请看一看安迪的答案 示例:
Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");
InputStream dbAsStream = resource.getInputStream();
你有完整的路径吗
-Djavax.net.ssl.trustStore=something/like/this/truststore.jks
问题可能与类路径有关。您的
truststore.jks
和keystore.jks
文件是否位于运行java-jar app.jar
的同一目录中?是的,app.jar、truststore.jks和keystore.jks位于我运行java-jar app.jar的同一目录中。问题可能与类路径有关。您的truststore.jks
和keystore.jks
文件是否位于运行java-jar app.jar
的同一目录中?是的,app.jar、truststore.jks和keystore.jks位于运行java-jar app.jar的同一目录中。