Java中解码已编码keystore.jks失败,报文件未找到异常
异常根源
java.io.FileNotFoundException: Could not open ServletContext resource [/abc] 这个异常说明你的代码(或Spring自动绑定逻辑)把配置里的ssl.keys.store值abc当成了资源文件路径去加载,而不是直接读取Base64字符串。这和IDE无关,核心问题是配置绑定的类型错误。
解决方案
检查配置绑定字段类型
确保接收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 }验证Base64解码逻辑
确认abc确实是keystore.jks文件的正确Base64编码。可以用Base64解码工具把abc还原成文件,再用keytool命令验证:keytool -list -keystore 还原后的文件,确保文件有效。排查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

