0

0

如何在 Spring Boot 中正确读取配置目录下的 PEM 文件

聖光之護

聖光之護

发布时间:2025-12-27 11:12:32

|

876人浏览过

|

来源于php中文网

原创

如何在 Spring Boot 中正确读取配置目录下的 PEM 文件

spring boot 的 `-dspring.config.additional-location` 仅支持加载配置类文件(如 application.yml、properties),无法自动识别或注入普通资源文件(如 test.pem)。需通过配置属性指定路径,再结合 `resourceloader` 或 `files.readallbytes()` 安全读取。

在 Spring Boot 应用中,-Dspring.config.additional-location 是专为外部化配置设计的机制,它仅解析符合 Spring 配置格式的文件(如 .yml、.properties、.xml 等),并将其键值对注入到 Spring Environment 中。而 test.pem 是纯文本证书文件,不属于配置资源,因此 不会被自动扫描、注册或暴露为配置项 —— 这正是直接使用 Paths.get("test.pem") 报 NoSuchFileException 的根本原因:JVM 当前工作目录(user.dir)通常为项目根目录或 IDE 启动路径,并非你指定的 rdk-factory-data-config/ 目录,且该路径未加入类路径(classpath)或资源加载器搜索范围。

✅ 正确做法:将 PEM 文件路径作为配置项声明,再通过 Spring 资源抽象安全读取

步骤 1:在配置文件中声明 PEM 路径

在 application-local.yml(或你激活的 profile 配置文件)中添加自定义属性:

# rdk-factory-data-config/application-local.yml
app:
  cert:
    pem-path: file:/Users/bharatsuthar/HGW/codebaseDevelopmentRepo1/data-generation-tool/rdk-factory-data-config/test.pem
✅ 优势:路径集中管理、支持 profile 切换、便于测试与部署隔离。

步骤 2:使用 ResourceLoader 读取 PEM 内容(推荐)

ResourceLoader 是 Spring 提供的统一资源访问接口,天然支持 file:、classpath:、http: 等协议,且能正确解析 file:/... 路径:

易森网络企业版
易森网络企业版

如果您是新用户,请直接将本程序的所有文件上传在任一文件夹下,Rewrite 目录下放置了伪静态规则和筛选器,可将规则添加进IIS,即可正常使用,不用进行任何设置;(可修改图片等)默认的管理员用户名、密码和验证码都是:yeesen系统默认关闭,请上传后登陆后台点击“核心管理”里操作如下:进入“配置管理”中的&ld

下载
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

@Service
public class PemCertificateService {

    private final ResourceLoader resourceLoader;

    public PemCertificateService(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    // 从配置中获取路径并读取 PEM 内容
    public String loadPemCertificate(String pemPath) throws IOException {
        Resource resource = resourceLoader.getResource(pemPath);
        if (!resource.exists()) {
            throw new IllegalArgumentException("PEM file not found: " + pemPath);
        }
        return new String(resource.getInputStream().readAllBytes(), StandardCharsets.UTF_8);
    }
}

调用示例:

@Component
public class CertInitializer {

    private final PemCertificateService pemService;

    public CertInitializer(PemCertificateService pemService) {
        this.pemService = pemService;
    }

    @PostConstruct
    public void init() throws IOException {
        String pemContent = pemService.loadPemCertificate("${app.cert.pem-path}");
        System.out.println("Loaded PEM:\n" + pemContent.substring(0, 100) + "...");
    }
}

⚠️ 注意事项与最佳实践

  • 避免硬编码绝对路径:开发时可用 file: 协议,但生产环境建议改用 classpath:(将 test.pem 放入 src/main/resources/config/)或挂载为容器卷后统一映射路径。
  • 不要用 Paths.get("test.pem"):该方式依赖 JVM 当前工作目录,不可靠且无法跨环境迁移。
  • 证书内容需校验完整性:读取后建议验证 PEM 头尾(-----BEGIN CERTIFICATE----- / -----END CERTIFICATE-----),防止文件损坏或格式错误。
  • 敏感信息防护:若 PEM 包含私钥,请确保文件权限严格(如 chmod 600),并在日志中禁止打印完整内容。

✅ 总结

Spring Boot 不会自动将 -Dspring.config.additional-location 指定目录下的非配置文件(如 .pem)纳入资源加载体系。正确路径是:通过配置属性声明路径 → 使用 ResourceLoader 加载 → 安全读取为字符串。这种方式既符合 Spring 的资源抽象规范,又具备环境可移植性与配置可维护性,是企业级应用的标准实践。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

98

2025.08.06

spring boot框架优点
spring boot框架优点

spring boot框架的优点有简化配置、快速开发、内嵌服务器、微服务支持、自动化测试和生态系统支持。本专题为大家提供spring boot相关的文章、下载、课程内容,供大家免费下载体验。

135

2023.09.05

spring框架有哪些
spring框架有哪些

spring框架有Spring Core、Spring MVC、Spring Data、Spring Security、Spring AOP和Spring Boot。详细介绍:1、Spring Core,通过将对象的创建和依赖关系的管理交给容器来实现,从而降低了组件之间的耦合度;2、Spring MVC,提供基于模型-视图-控制器的架构,用于开发灵活和可扩展的Web应用程序等。

383

2023.10.12

Java Spring Boot开发
Java Spring Boot开发

本专题围绕 Java 主流开发框架 Spring Boot 展开,系统讲解依赖注入、配置管理、数据访问、RESTful API、微服务架构与安全认证等核心知识,并通过电商平台、博客系统与企业管理系统等项目实战,帮助学员掌握使用 Spring Boot 快速开发高效、稳定的企业级应用。

61

2025.08.19

Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性
Java Spring Boot 4更新教程_Java Spring Boot 4有哪些新特性

Spring Boot 是一个基于 Spring 框架的 Java 开发框架,它通过 约定优于配置的原则,大幅简化了 Spring 应用的初始搭建、配置和开发过程,让开发者可以快速构建独立的、生产级别的 Spring 应用,无需繁琐的样板配置,通常集成嵌入式服务器(如 Tomcat),提供“开箱即用”的体验,是构建微服务和 Web 应用的流行工具。

4

2025.12.22

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

21

2025.12.24

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1843

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2080

2024.08.01

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

27

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2万人学习

C# 教程
C# 教程

共94课时 | 5.4万人学习

Java 教程
Java 教程

共578课时 | 38.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号