java.lang.SecurtiyException 在未签名的 jar 中
java.lang.SecurtiyException at unsigned jar's
我在运行时遇到了 SecurityException:
java.lang.SecurityException: class "util.OpenNItoDTW"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:952)
其中 util.OpenNItoDTW 是我自己的 class,它使用的是第三方 jar。
根据 this,必须使用相同的证书对 jar 进行签名。
但两个 jar 都没有签名,使用 jdk 的 jarsigner -verify
.
检查了它
究竟是什么导致了这个问题?
确保使用尚未使用的包名称
您可能正在使用其他人已经使用过的软件包名称。如果他们已经签署了他们的作品而您的作品未签名,那么您将收到该错误。错误的目的是保护签名内容不被其他人在未经原始签名者同意的情况下添加。
签名就像说 "This code is from me, and you can trust me"。如果有人可以向您的包裹中添加新的 类,那将意味着您的东西不再受信任,因此可以防止这种情况。
将包名想象成商标。他们通常以公司网站的相反顺序开始。例如 org.apache.commons.codec
以 org.apache
开头,表示它来自运行 apache.org
的同一组。您应该尝试确保您的包名称是唯一的,这样您就不会无意中将您的代码表示为来自另一个组织。
我在运行时遇到了 SecurityException:
java.lang.SecurityException: class "util.OpenNItoDTW"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:952)
其中 util.OpenNItoDTW 是我自己的 class,它使用的是第三方 jar。
根据 this,必须使用相同的证书对 jar 进行签名。
但两个 jar 都没有签名,使用 jdk 的 jarsigner -verify
.
究竟是什么导致了这个问题?
确保使用尚未使用的包名称
您可能正在使用其他人已经使用过的软件包名称。如果他们已经签署了他们的作品而您的作品未签名,那么您将收到该错误。错误的目的是保护签名内容不被其他人在未经原始签名者同意的情况下添加。
签名就像说 "This code is from me, and you can trust me"。如果有人可以向您的包裹中添加新的 类,那将意味着您的东西不再受信任,因此可以防止这种情况。
将包名想象成商标。他们通常以公司网站的相反顺序开始。例如 org.apache.commons.codec
以 org.apache
开头,表示它来自运行 apache.org
的同一组。您应该尝试确保您的包名称是唯一的,这样您就不会无意中将您的代码表示为来自另一个组织。