You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中解码已编码keystore.jks失败,报文件未找到异常

问题分析与解决

异常根源

java.io.FileNotFoundException: Could not open ServletContext resource [/abc] 这个异常说明你的代码(或Spring自动绑定逻辑)把配置里的ssl.keys.store值abc当成了资源文件路径去加载,而不是直接读取Base64字符串。这和IDE无关,核心问题是配置绑定的类型错误。

解决方案

  1. 检查配置绑定字段类型
    确保接收ssl.keys.store的字段是String类型,而非org.springframework.core.io.Resource类型。不管用@ConfigurationProperties还是@Value注入,字段定义必须为String,这样才能直接拿到Base64编码字符串,不会触发Spring自动加载资源的逻辑。
    示例正确配置类字段:

    @ConfigurationProperties(prefix = "ssl.keys")
    public class SslProperties {
        private String store; // 必须是String,不能是Resource
        private String password;
        private String algorithm;
        private String alias;
        private String keyPassword;
        // getter/setter
    }
    
  2. 验证Base64解码逻辑
    确认abc确实是keystore.jks文件的正确Base64编码。可以用Base64解码工具把abc还原成文件,再用keytool命令验证:keytool -list -keystore 还原后的文件,确保文件有效。

  3. 排查IntelliJ配置加载问题
    如果IntelliJ中application.yml未被正确识别,右键该文件选择Mark Directory as -> Resources Root,确保配置文件被纳入项目资源路径。

依赖说明

你代码里用到的KeyStore、Base64.getDecoder()都是JDK自带API,无需额外引入依赖。如果是Spring Boot项目,基础的spring-boot-starter-web或spring-boot-starter已经包含所有必要核心依赖,不需要额外添加。
若项目用到第三方Base64工具(比如Apache Commons Codec),才需要引入对应依赖:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

但从你提供的代码看,用的是JDK自带的java.util.Base64,所以不需要这个依赖。

内容的提问来源于stack exchange,提问作者Coder17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:47:19