java.lang.SecurityException异常

记录一个问题处理

通常发生在程序尝试加载或验证JAR文件时,其数字签名与文件内容不匹配。这多见于打包(如创建包含依赖的Fat JAR)或运行环境存在问题。

异常信息

java 复制代码
ava.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    at sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java:330)
    at sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier.java:263)
    at java.util.jar.JarVerifier.processEntry (JarVerifier.java:318)

报错路径:

报错原因:

Fat JAR打包:使用Maven Shade Plugin等工具创建包含所有依赖的"Fat JAR"时,如果多个依赖JAR都带有签名文件,这些文件可能会被错误地合并或包含进最终的JAR,导致签名冲突和验证失败

解决方案:

如果你的项目使用Maven构建,在pom.xml文件中配置maven-shade-plugin是根除此问题的最佳方法。在插件的配置中,排除所有依赖中的签名相关文件:

xml 复制代码
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.1.0</version> <!-- 建议使用最新版本 -->
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <filters>
              <filter>
                <artifact>*:*</artifact>
                <excludes>
                  <!-- 排除所有依赖JAR中的签名文件 -->
                  <exclude>META-INF/*.SF</exclude>
                  <exclude>META-INF/*.DSA</exclude>
                  <exclude>META-INF/*.RSA</exclude>
                </excludes>
              </filter>
            </filters>
            <!-- 如果你的JAR是可执行的,别忘了指定主类 -->
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>你的主类的完整路径</mainClass>
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
相关推荐
WZTTMoon8 分钟前
从 “完整对象” 视角看Spring 循环依赖
java·spring boot·后端·spring
baviya11 分钟前
一文彻底搞懂 Maven 依赖——从 <dependency> 到依赖冲突,带你看懂 Maven 的“江湖规矩”
java·maven
一瓢一瓢的饮 alanchan20 分钟前
Flink原理与实战(java版)#第1章 Flink快速入门(第一节IDE词频统计)
java·大数据·flink·kafka·实时计算·离线计算·流批一体化计算
java_logo20 分钟前
Docker 容器化部署 QINGLONG 面板指南
java·运维·docker·容器·eureka·centos·rabbitmq
那我掉的头发算什么21 分钟前
【javaEE】多线程--认识线程、多线程
java·jvm·redis·性能优化·java-ee·intellij-idea
Pluchon22 分钟前
硅基计划6.0 JavaEE 叁 文件IO
java·学习·java-ee·文件操作·io流
程序员卷卷狗43 分钟前
联合索引的最左前缀原则与失效场景
java·开发语言·数据库·mysql
纪莫44 分钟前
技术面:SpringCloud(SpringCloud有哪些组件,SpringCloud与Dubbo的区别)
java·spring·java面试⑧股
会编程的吕洞宾1 小时前
Java中的“万物皆对象”:一场编程界的哲学革命
java·后端
会编程的吕洞宾1 小时前
Java封装:修仙界的"护体罡气"
java·后端