概述:
我使用以下代码从证书文件创建密钥库,该文件位于resources / certificates / crt.p12中:
public static KeyStore getKeyStoreFromFile(String certificateFilePath,
String certificatePassword) throws KeyStoreException {
File p12File = new File(
KeyStoreUtil.class.getClassLoader().getResource(certificateFilePath).getFile());
KeyStore.Builder builder = KeyStore.Builder.newInstance("PKCS12", null, p12File,
new KeyStore.PasswordProtection(certificatePassword.toCharArray()));
return builder.getKeyStore();
}
它适用于Windows平台。
问题:
但是,当我在Linux平台上运行时,系统无法找到该文件并引发以下异常:
java.lang.IllegalArgumentException: File does not exist or it does not refer to a normal file: file:/executable/billpay-billinfo-services.jar!/certificates/crt.p12
我认为这是不同的平台问题,如果有人能帮我找到解决这个问题的解决方案,我将不胜感激。
答案 0 :(得分:0)
喜欢这个 Classpath resource not found when running as jar 但不是重复,不是同一个问题
resource.getFile()期望资源本身在文件系统上可用,即它不能嵌套在jar文件中。使用resource.getInputStream()。
资料来源:Classpath resource not found when running as jar
答案 1 :(得分:0)
首先,我明白将证书文件放在类路径中是一种不好的做法,因为将来可能需要更改它。所以我将它从类路径中排除并将其放在我的jar文件旁边。这次我运行测试时可以访问证书文件。