【问题标题】:Loading Java classes from a signed applet从签名的小程序加载 Java 类
【发布时间】:2010-09-08 19:06:45
【问题描述】:

如果我正在运行已签名的 Java 小程序。我可以在同一个域甚至同一个主机中从远程源加载其他类并运行它们吗?

我想在不更改页面甚至停止当前小程序的情况下执行此操作。当然,所有类的总大小太大,无法一次全部加载。

有没有办法做到这一点?有没有办法用签名的小程序来做到这一点并保持他们的“信心”状态?

【问题讨论】:

    标签: java applet signed download


    【解决方案1】:

    听起来应该是可能的(但我从来没有这样做过)。您是否已经看过远程方法调用 (RMI)?

    【讨论】:

      【解决方案2】:

      我认为小程序中的类是延迟加载的。按需加载。

      无论如何,如果类在 jar 之外,您可以简单地使用 applet 类加载器并按名称加载它们。例如:

      ClassLoader loader = this.getClass().getClassLoader();
      Class clazz = loader.loadClass("acme.AppletAddon");
      

      如果您想从 jar 加载类,我认为您需要使用 jar 的 url 创建一个新的 URLClassLoader 实例。

      URL[] urls = new URL[]{new URL("http://localhost:8080/addon.jar")};
      URLClassLoader loader = URLClassLoader.newInstance(urls,this.getClass().getClassLoader());
      Class clazz = loader.loadClass("acme.AppletAddon");
      

      默认情况下,applet 被禁止创建新的类加载器。但是,如果您签署您的小程序并包含创建新类加载器的权限,您就可以做到。

      【讨论】:

      • 谢谢,URLClassLoader 看起来正是我想要的。我只需要确保我可以保持签名链完好无损。
      • 它在父(加载器)小程序签名后工作。但是子(加载的)jar,即使它们已签名,也不会获得安全权限。
      【解决方案3】:

      是的,您可以打开与运行小程序的主机的 URL 连接。您可以使用 HTTP url 创建一个类加载器,或者将类(作为 jars)下载到用户的机器并在类路径中使用这些 jars 创建一个类加载器。小程序不会停止,您无需加载其他页面。

      关于您关于信心的问题的第二部分,一旦用户授予对您的小程序的访问权限,它就可以下载任何东西,是的任何东西,它想要到本地机器。如果您的 UI 设计允许,您可能可以告知用户它在做什么。

      希望这会有所帮助。

      【讨论】:

      • 太棒了,谢谢。我希望我能接受/合并这两个答案。
      • 不幸的是,正如我对 jassuncao 的回答所评论的那样,到目前为止加载的小程序没有适当的权限。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多