springboot项目打包后证书文件不可用

2021-06-07 21:03

阅读:567

标签:boot   访问   exce   NPU   default   config   不同   usr   编码   

现象

  • 读取不到证书文件
  • 证书文件变大

解决方案

读取不到证书文件

由于是springboot项目,部署时打包成jar启动,无法获取到有效的证书文件地址。解决方案:首次访问时从jar中提取证书文件到当前目录中,代码如下:

/**
 * 获取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;
}

证书文件变大

从jar中提取到的证书文件大小与实际不一致,变大了。原因:maven打包对项目进行统一编码,但是部分文件可能不需要进行重新编码,例如: 证书文件,重新编码后可能导致证书不可用。解决方案如下:

org.apache.maven.plugins
        maven-resources-plugin
        jks

springboot项目打包后证书文件不可用

标签:boot   访问   exce   NPU   default   config   不同   usr   编码   

原文地址:https://www.cnblogs.com/sheung/p/14550990.html


评论


亲,登录后才可以留言!