Я написал двухстороннюю служебную очистку с проверкой подлинности для использования защищенной успокоительной веб-службы через порт 8443 через https.Вот части 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 launchcer
java -jar app.jar
Я получил исключение ниже.
Не удалось создать экземпляр объекта с помощью фабричного метода;вложенным исключением является org.springframework.beans.BeanInstantiation Exception: не удалось создать экземпляр [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
и получил то же исключение.Любая помощь будет по достоинству оценена.