从签名的小程序加载Java类

问题描述 投票:6回答:3

如果我正在运行签名的Java applet。是否可以从相同域或什至是主机中的远程源加载其他类,然后运行它们?

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

有没有办法做到这一点?有没有办法使用签名的applet来做到这一点并保持其“信任”状态?

java applet signed download
3个回答
6
投票

我认为类是在Applet中延迟加载的。按需加载。

无论如何,如果这些类在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创建新的类加载器。但是,如果您在applet上签名并包括创建新的类加载器的权限,则可以这样做。


2
投票

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

关于您的信任度问题的第二部分,一旦用户授予访问您的applet的权限,它就可以下载任何东西,是的,它想要下载到本地计算机。如果您的UI设计允许,您可能会通知用户正在执行的操作。

希望这会有所帮助。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.