2008-09-13 17 views
5

Si estoy ejecutando un applet Java firmado, ¿puedo cargar clases adicionales de fuentes remotas (en el mismo dominio, quizás incluso el mismo host) y ejecutarlas?cargando clases Java desde un applet firmado

Me gustaría hacer esto sin cambiar páginas o incluso detener el applet actual. Por supuesto, el tamaño total de todas las clases es demasiado grande para cargarlas todas a la vez.

¿Hay alguna manera de hacerlo? ¿Y hay alguna manera de hacer esto con los applets firmados y preservar su estado de "confianza"?

Respuesta

5

Creo que las clases están cargadas de lazy en applets. siendo cargado a pedido

De todos modos, si las clases están fuera de un contenedor, simplemente puede usar el cargador de clases del applet y cargarlas por su nombre. Ej:

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

Si desea cargar las clases de un frasco Creo que tendrá que crear una nueva instancia de URLClassLoader con la URL (s) del frasco (s).

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

De forma predeterminada, los applets tienen prohibido crear nuevos clasificadores. Pero si firma su applet e incluye permiso para crear nuevos cargadores de clases, puede hacerlo.

+0

Gracias, URLClassLoader parece justo lo que quería. Solo necesitaré asegurarme de que pueda mantener intacta la cadena de firmas. –

+1

Funcionó después de que se firmó el applet principal (cargador). Pero los archivos secundarios (cargados), aunque estén firmados, no reciben permisos de seguridad. –

0

Parece que debería ser posible (pero nunca lo he hecho). ¿Ya ha echado un vistazo a Invocación de método remoto (RMI)?

+0

RMI no es la dirección que estoy buscando, pero gracias de todos modos. –

2

Sí, puede abrir las conexiones de URL al host desde el que ejecutó su applet. Puede crear un cargador de clases con URL HTTP, o descargar las clases (como jarras) a la máquina del usuario y crear un cargador de clases con esas jarras en el classpath. El applet no se detendrá y no necesitará cargar otra página.

En cuanto a la segunda parte de su pregunta sobre la confianza, una vez que el usuario ha otorgado acceso a su applet, puede descargar cualquier cosa, sí o sí, a la máquina local. Probablemente pueda informar al usuario sobre lo que está haciendo, si su diseño de interfaz de usuario lo permite.

Espero que esto ayude.

+0

Brillante, gracias. Ojalá pudiera aceptar/fusionar ambas respuestas. –

+0

Desafortunadamente, cuando comento la respuesta de jassuncao, el applet cargado hasta ahora no tiene los permisos apropiados. –

Cuestiones relacionadas