【问题标题】:Signed Applet mix code under J7u21or J7u40 gives java.lang.NoClassDefFoundErrorJ7u21或J7u40下签名的Applet混合代码给出java.lang.NoClassDefFoundError
【发布时间】:2013-09-10 03:59:18
【问题描述】:

请注意,这已发布在 Oracle Java 论坛上,地址为 https://forums.oracle.com/thread/2577877

我有一个显示图表的简单小程序;此小程序有两个 jar 文件,主 jar 文件由受信任的 CA 签名,另一个 jar 文件未签名

在已签名 jar 文件的清单中,我已添加

Trusted-Library value="true" 

当 applet 从 Java 控制台启动时,它试图从未签名的 jar 文件中调用类的创建对象,我从未签名的 jar 中获得给定类的 java.lang.ClassNotFoundException

我已经在 windows 7 Chrome 和 Internet Explorer 上尝试过这个,基于各种 Java 7 版本(Internet Explorer 上的 40、21 和 Chrome 上的版本 6)

它不起作用。

如果我签署了第二个 jar 文件,它可以正常工作。

请注意,我不想绕过 java 配置中的混合代码检查。

任何想法或提示将不胜感激。

【问题讨论】:

  • 清单中应该是Trusted-Library: true..
  • 已在清单中添加。我打开清单并检查它是否存在。请认真准备好帖子
  • 请仔细阅读我的评论。事实上,做的还不止这些。选择其中的gray text 并在此页面中对该字符串进行“查找”。目前有两个命中,没有在你的问题中。

标签: java security applet classnotfoundexception signed


【解决方案1】:

https://forums.oracle.com/thread/2280127 的帖子证实了这一点

并得到Oraclehttp://docs.oracle.com/javase/7/docs/technotes/guides/jweb/mixed_code.html#trusted_library的确认

“如果要使用受信任库清单属性标记的 jar 文件中的代码使用依赖于类加载器的调用 [...] Trusted-Library 中的代码可以通过调用 Thread.currentThread().getContextClassLoader().[...] 来查找正常的加载器 通常,必须注意确保可信库中的代码是以谨慎和安全的方式编写的,并且与从属于应用程序的任何剩余 jar 并由普通的装载机。”

“Thread.currentThread().getContextClassLoader().[...]”

我刚刚做了一个简单的测试,将一个方法从受信任的 jar 调用到沙盒 jar,我使用反射来做到这一点并且它有效。

似乎每次使用受信任的 jar 文件中的任何沙箱 jar 文件类,我们都必须使用反射(加载类,调用所需的方法)。这是前进的方向吗。有人可以证实这一点。

private void useReflection() { 尝试 {

       // using normal class loader 
     Class<?> clazz = Class.forName("com.abc.bla.bla.SandBox", true, Thread.currentThread().getContextClassLoader());
     Constructor<?> constructor = clazz.getConstructor();
     Object obj = constructor.newInstance(new Object[] {});

     Method method = clazz.getMethod("sayHello", new Class[] {});
     method.invoke(obj, new Object[] {});
  }
  catch (Exception ex)
  {
     ex.printStackTrace();
  }

}

总而言之,似乎我们必须使用反射来加载沙箱 jar 文件(不受信任),以允许使用普通的类加载器,并通过 import 语句避免默认的类加载器,这是为签名 (受信任的)jar 文件,根据清单附加属性处于混合模式。

【讨论】:

    猜你喜欢
    • 2014-01-18
    • 2012-10-07
    • 2022-01-16
    • 2019-12-02
    • 2011-12-21
    • 2017-04-22
    • 2011-01-05
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多