2008-09-13 4 views
5

Wenn ich ein signiertes Java-Applet ausführe, kann ich zusätzliche Klassen von Remote-Quellen (in derselben Domäne, vielleicht sogar demselben Host) laden und ausführen?Laden von Java-Klassen aus einem signierten Applet

Ich würde dies tun, ohne Seiten zu ändern oder sogar das aktuelle Applet zu stoppen. Natürlich ist die Gesamtgröße aller Klassen zu groß, um sie alle gleichzeitig zu laden.

Gibt es eine Möglichkeit, dies zu tun? Und gibt es eine Möglichkeit, dies mit signierten Applets zu tun und ihren "Vertrauensstatus" zu bewahren?

Antwort

5

Ich denke, Klassen sind faul in Applets geladen. bei Bedarf geladen werden.

Wie auch immer, wenn die Klassen außerhalb eines Jar sind, können Sie einfach den Applet Classloader verwenden und sie mit Namen laden. Ex:

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

Wenn Sie Klassen aus dem Glas laden Ich glaube, Sie brauchen eine neue Instanz von URLClassLoader mit der URL (s) der Dose (n) zu erstellen.

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"); 

Standardmäßig dürfen Applets keine neuen Klassenladeprogramme erstellen. Wenn Sie jedoch Ihr Applet signieren und die Berechtigung zum Erstellen neuer Klassenladeprogramme einschließen, können Sie es tun.

+0

Danke, URLClassLoader scheint genau das zu sein, was ich wollte. Ich muss nur sicherstellen, dass ich die Zeichenkette intakt halte. –

+1

Es funktionierte, nachdem das übergeordnete Applet (Loader) signiert wurde. Aber die untergeordneten (geladenen) Gläser erhalten, obwohl sie signiert sind, keine Sicherheitsberechtigungen. –

0

Klingt wie es möglich sein sollte (aber ich habe es noch nie getan). Haben Sie sich bereits die Remote Method Invocation (RMI) angesehen?

+0

RMI ist nicht die Richtung, die ich suche, aber trotzdem danke. –

2

Ja, Sie können URL-Verbindungen zu dem Host öffnen, von dem aus Sie das Applet ausgeführt haben. Sie können entweder einen Klassenlader mit HTTP-URLs erstellen oder die Klassen (als JARs) auf den Computer des Benutzers herunterladen und einen Klassenlader mit diesen JARs im Klassenpfad erstellen. Das Applet wird nicht gestoppt und Sie müssen keine weitere Seite laden.

In Bezug auf den zweiten Teil Ihrer Frage über das Vertrauen, sobald der Benutzer Zugriff auf Ihr Applet gewährt hat, kann es alles herunterladen, ja alles, es auf dem lokalen Rechner will. Sie können den Benutzer wahrscheinlich darüber informieren, was er tut, wenn Ihr UI-Design dies zulässt.

Hoffe, das hilft.

+0

Brilliant, danke. Ich wünschte, ich könnte beide Antworten akzeptieren/zusammenführen. –

+0

Leider, wie ich Jassuncao die Antwort kommentierte, hat das geladene Applet bisher nicht die entsprechenden Berechtigungen. –

Verwandte Themen