如何获取Spring Boot Java资源中存储的pem文件

问题描述 投票:0回答:1

我正在尝试访问 Spring Boot 应用程序中的 pem 文件。该文件位于 src/main/resources.

当我在本地计算机中启动应用程序时,它可以工作,但是当我将 jar 文件推送到 VPS 服务器或使用 docker 运行时,它无法工作。

它显示此错误:

java.lang.NullPointerException: Cannot invoke "String.getBytes(java.nio.charset.Charset)" because "src" is null

我使用此代码来获取数据:

    public PrivateKey getPrivate() throws Exception {
        ClassPathResource resource = new ClassPathResource("marchent_private.pem");
        InputStream inputStream = resource.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String content = reader.readLine();
        System.out.println(content);

        content = content.replaceAll("\\s", "");

        byte[] keyBytes = Base64.getDecoder().decode(content);
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(spec);
    }

那么现在我该如何解决这个问题呢?

如果您想查看更多信息,可以查看项目 git。 项目链接

java spring spring-boot
1个回答
0
投票

建议将配置外部化,不要将其包含在 .jar 中:

https://docs.spring.io/spring-boot/reference/features/external-config.html#:~:text=Spring%20Boot%20lets%20you%20externalize,%2C%20and%20command%2Dline% 20 个论点

当您在与本地环境不同的环境中运行应用程序时,您通常会使用 diffnet 命令(指定路径或属性的位置等)。执行此操作的常见方法是使用有关环境的不同属性文件:

https://docs.spring.io/spring-boot/docs/1.2.0.M1/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-属性

具有外部化属性的命令示例:

java -jar /jarlocationinvm/yourjarname.jar --spring.profiles.active=prod --spring.config.location=/configlocationinvm/

© www.soinside.com 2019 - 2024. All rights reserved.