【问题标题】:java.lang.SecurityException: class "XYZ"'s signer information does not match signer information of other classes in the same packagejava.lang.SecurityException:类“XYZ”的签名者信息与同一包中其他类的签名者信息不匹配
【发布时间】:2009-08-27 08:56:44
【问题描述】:

我有一个在浏览器中运行并从 Javascript 调用的小程序。有 2 个类:PortalLauncherParamSplitter,它们在默认包中。 Javascript 调用 PortalLauncher 中的方法,该方法又调用 ParamSplitter 中的函数。小程序在一个签名的 jar 中。

这在大多数情况下都有效。但是,一些用户有时会遇到问题。在一天中的某个时间(即不是第一次访问)会引发以下异常:

java.lang.SecurityException: class "ParamSplitter"'s signer information does not
    match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(Unknown Source)
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at PortalLauncher.openFile(PortalLauncher.java:313)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
    at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
    at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
    at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
java.lang.Exception: java.lang.SecurityException: class "ParamSplitter"'s signer
    information does not match signer information of other classes in the same package
    at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
    at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.com.DispatchImpl.invoke(Unknown Source)

任何人都可以阐明这个异常的含义以及可能导致它的原因吗?大约有 800 名用户拥有此小程序,但只有少数人受到影响,甚至这些用户也只是偶尔出现问题。

【问题讨论】:

    标签: java applet securityexception


    【解决方案1】:

    这意味着在同一个 JVM 中,还有从其他 jars 加载的其他类,这些 jar 已经不同地签名(或者可能没有签名),也在默认包中。

    如果我正确解释了您的问题,您的小程序本身只有一个罐子,所以它一定是来自其他地方的罐子;只有一些用户有。 我的第一个想法可能是在另一个选项卡中运行的小程序的 jar(可以使用相同的 jvm 实例)。但是其他小程序应该使用单独的类加载器,所以它们不应该那样碰撞。 更有可能的是,他们的 jvm 的引导类路径中有一个 jar,根包中也有一个类。

    无论哪种方式,解决方案/解决方法都是不使用默认包,而是使用您自己的包。这样可以避免与其他罐子发生碰撞。

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多