springboot项目打包后证书文件不可用
2021-06-07 21:03
标签:boot 访问 exce NPU default config 不同 usr 编码 由于是springboot项目,部署时打包成jar启动,无法获取到有效的证书文件地址。解决方案:首次访问时从jar中提取证书文件到当前目录中,代码如下: 从jar中提取到的证书文件大小与实际不一致,变大了。原因:maven打包对项目进行统一编码,但是部分文件可能不需要进行重新编码,例如: 证书文件,重新编码后可能导致证书不可用。解决方案如下: springboot项目打包后证书文件不可用 标签:boot 访问 exce NPU default config 不同 usr 编码 原文地址:https://www.cnblogs.com/sheung/p/14550990.html现象
解决方案
读取不到证书文件
/**
* 获取jar包中证书文件地址
*
* @param fileName 证书名称
* @return
*/
public static synchronized String getDefaultPath(String fileName) {
String path;
try {
// 获取当前项目根目录,兼容不同操作系统
path = FileUtils.class.getResource("/").getPath();
String osName = System.getProperties().getProperty("os.name");
if (osName.startsWith("Windows")) {
path = path.replaceFirst("file:/", "");
} else {
path = path.replaceFirst("file:", "");
}
int i = path.indexOf("projectName.jar");
// 拼接证书存放位置
if (i > 0) {
path = path.substring(0, i) + fileName;
} else {
path = path + fileName;
}
// 证书不存在,从jar包中提取
if (!new File(path).exists()) {
InputStream is = FileUtils.class.getResourceAsStream("/" + fileName);
try (BufferedInputStream in = new BufferedInputStream(is); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(path))) {
int len;
byte[] b = new byte[1024];
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
}
}
} catch (Exception e) {
path = "/usr/local/springboot/app/xxx/" + fileName;
System.out.println(String.format("file %s is not found,error is %s, use default path %s", fileName, e.getMessage(), path));
}
return path;
}
证书文件变大