Answers:
当从不同的JAR文件加载属于同一个程序包的类,并且那些JAR文件具有使用不同证书签名的签名时,就会发生这种情况-或更常见的是,至少一个签名了,而其他一个或多个未签名(包括已加载的类)目录中,因为这些AFAIK无法签名)。
因此,请确保使用相同的证书对所有JAR(或至少包含相同包中的类的JAR)进行签名,或者确保使用重叠的包从JAR文件清单中删除签名。
一种简单的解决方法是尝试更改导入的jar文件的顺序,这可以通过(Eclipse)完成。右键单击您的软件包->构建路径->配置构建路径->参考和库->订购和导出。尝试更改包含签名文件的jar的顺序。
答:如果使用maven,调试冲突罐子的一种有用方法是:
mvn dependency:tree
例如,一个例外:
java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"'s signer information does not match signer information of other classes in the same package
我们的确是:
mvn dependency:tree|grep servlet
其输出:
[INFO] +- javax.servlet:servlet-api:jar:2.5:compile
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet.jsp:jar:2.2.0.v201112011158:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:jar:1.2.0.v201105211821:compile
[INFO] | +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:compile
[INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.0.0.RC2:compile
显示了冲突的servlet-api 2.5和javax.servlet3.0.0.x。
B.其他有用的提示(如何调试安全异常以及如何排除Maven Deps)是在签名者信息不匹配时提出的问题。
就我而言,我在库路径:S中复制了BouncyCastle的JAR版本
这可能在使用cglib代理的代理中发生,因为CGLIB使用他自己的签名者信息而不是应用程序目标类的签名者信息。
名称:net / sf / jasperreports / engine / util / xml / JaxenXPathExecuterFactory.c lass SHA-256-摘要:q3B5wW + hLX / + lP2 + L0 / 6wRVXRHq1mISBo1dkixT6Vxc =
如果您正在Eclipse中运行它,请检查添加到构建路径中的所有项目的jar;否则,请检查它们。或执行control-shift-T并扫描匹配相同名称空间的多个jar。然后从项目的构建路径中删除多余或过时的jar。
线程太旧了,但是由于我在此问题上停留了很长时间,因此可以解决此问题(希望它对某人有帮助)
我的情况:
程序包名称为:com.abc.def。有2个jar文件,其中包含该程序包中的类,例如jar1和jar2,即jar1中存在一些类,jar2中存在其他类。这些jar文件使用相同的密钥库签名,但是在构建中的不同时间(即分别)签名。这似乎导致jar1和jar2中文件的签名不同。
我将所有文件放在jar1中,并一起构建(并签名)它们。问题解决了。
PS:程序包名称和jar文件名称仅是示例
如果您从bouncycastle.org添加了所有jar(在我的情况下从crypto-159.zip中添加),则只需删除不适用于您的JDK的jar。有冗余。您可能只需要“ jdk15on”罐子。
如果您包含一个名称不同或来自不同位置的文件两次,也会发生这种情况,尤其是当这些文件是同一文件的两个不同版本时。
我可以解决。
根本原因:这是将Sun JAXB实现与带签名的jar一起使用时的常见问题。本质上,JAXB实现试图通过生成一个类来直接访问属性而不使用反射来避免反射。不幸的是,它在与要访问的类相同的包中生成了这个新类,这就是错误的来源。
解决方案:添加以下系统属性以禁用与已签名的jar不兼容的JAXB优化:-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize = true
这在使用JUnit +放心+ hamcrest时发生在我身上,在这种情况下,请不要添加junit来构建路径,如果您有maven项目,则可以解决此问题,以下是pom.xml
<dependencies>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>