从签名的小程序加载 Java 类
-
09-06-2019 - |
题
如果我正在运行签名的 Java 小程序,我可以从远程源(在同一域中,甚至可能在同一主机中)加载其他类并运行它们吗?
我想在不更改页面甚至停止当前小程序的情况下执行此操作。当然,所有类的总大小太大,无法一次加载它们。
有没有办法做到这一点?有没有办法用签名的小程序来做到这一点并保持它们的“信任”状态?
解决方案
我认为小程序中的类是延迟加载的。按需加载。
无论如何,如果类位于 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");
默认情况下,小程序被禁止创建新的类加载器。但是,如果您签署您的小程序并包含创建新类加载器的权限,您就可以做到这一点。
其他提示
是的,您可以打开与运行小程序的主机的 URL 连接。您可以使用 HTTP url 创建类加载器,也可以将类(作为 jar)下载到用户的计算机上,并在类路径中使用这些 jar 创建类加载器。小程序不会停止,您不需要加载另一个页面。
关于您关于信心的问题的第二部分,一旦用户授予对您的小程序的访问权限,它就可以下载任何内容,是的,任何内容,它都可以下载到本地计算机。如果您的 UI 设计允许的话,您可以告知用户它正在做什么。
希望这可以帮助。
听起来应该是可能的(但我从来没有这样做过)。您是否已经看过远程方法调用(雷米)?
不隶属于 StackOverflow