首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中找不到keystore.jks和truststore.jks

在Spring中找不到keystore.jks和truststore.jks
EN

Stack Overflow用户
提问于 2019-02-06 05:41:53
回答 1查看 3.2K关注 0票数 2

我编写了一个双向自定义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的两种方法

代码语言:javascript
复制
@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

也得到了同样的例外。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-02-06 10:33:45

尝试使用resource.getInputStream()而不是resource.getFile() as,Spring中的resource.getFile()尝试访问文件系统路径,但它无法访问JAR中的路径

这个链接有一个丰富的内容,看一看安迪的答案这里

示例示例:

代码语言:javascript
复制
Resource resource = resourceLoader.getResource("classpath:GeoLite2-Country.mmdb");
            InputStream dbAsStream = resource.getInputStream();

你有没有使用完整的路径

代码语言:javascript
复制
-Djavax.net.ssl.trustStore=something/like/this/truststore.jks
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54547243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档