Fra*_*ank 115 java securityexception certificate
我像往常一样重新编译了我的类,突然收到以下错误消息.为什么?我该如何解决?
java.lang.SecurityException: class "Chinese_English_Dictionary"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:776)
Run Code Online (Sandbox Code Playgroud)
Mic*_*rdt 130
当从不同的JAR文件加载属于同一个包的类时,会发生这种情况,并且这些JAR文件具有使用不同证书签名的签名 - 或者更常见的是,至少有一个签名,一个或多个其他不签名(包括加载的类)来自目录,因为那些AFAIK无法签名).
因此,要么确保所有JAR(或至少包含来自相同软件包的类的JAR)使用相同的证书进行签名,要么使用重叠的包从JAR文件清单中删除签名.
小智 44
一个简单的方法是尝试更改导入的jar文件的顺序,这可以从(Eclipse)完成.右键单击您的包 - >构建路径 - >配置构建路径 - >引用和库 - >订单和导出.尝试更改包含签名文件的jar的顺序.
Eug*_*pov 39
答:如果您使用maven,调试冲突罐的有用方法是:
mvn dependency:tree
Run Code Online (Sandbox Code Playgroud)
例如,对于例外:
java.lang.SecurityException: class "javax.servlet.HttpConstraintElement"'s signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)
我们的确是:
mvn dependency:tree|grep servlet
Run Code Online (Sandbox Code Playgroud)
它的输出:
[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
Run Code Online (Sandbox Code Playgroud)
显示冲突的servlet-api 2.5和javax.servlet 3.0.0.x.
B.其他有用的提示(如何调试安全例外以及如何排除maven deps)是签名者信息不匹配的问题.
我有一个类似的例外:
java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
Run Code Online (Sandbox Code Playgroud)
根本问题是我两次包括Hamcrest库.一旦使用Maven pom文件.我还在项目的构建路径中添加了JUnit 4库(它还包含一个Hamcrest库).我只需要从构建路径中删除JUnit,一切都很好.