2009-03-06 18 views
5

He creado un applet básico donde el usuario selecciona un archivo de su disco duro, lee la primera línea de este archivo y lo pasa a JavaScript para un preprocesamiento adicional, y luego cuando hace clic en un botón que intenta cargar ese archivo a través de una solicitud HTTP POST. Encontré un applet de código abierto muy básico para cargar archivos que copié y modifiqué para este último bit.Java Applet Permissions

El problema es que, sin embargo, no funciona del todo. Parece que está funcionando bien, pero luego me encuentro con dos inconvenientes relacionados con los permisos. Los mensajes de la consola de Java decir que el applet tuvo acceso denegado errores en los siguientes dos permisos:

java.lang.RuntimePermission setFactory 
java.io.FilePermission read 

Me parece extraño, porque pensé que había concedido el permiso para el applet ya cuando construí con el " autofirmado "opción marcada en NetBeans, y luego hizo clic para confirmar la pequeña ventana emergente de seguridad en el navegador.

Además, la parte que codifiqué, donde lee el archivo y pasa la primera línea a JavaScript funciona bien. ¡Este es un indicador bastante claro de que el applet puede leer desde el sistema de archivos local! El problema no comienza hasta que intento iniciar la carga. Una cosa a tener en cuenta, supongo, es que el proceso de carga parece ejecutarse en un nuevo hilo, mientras que el resto se ejecuta en la clase principal sin crear hilos.

Soy un principiante total en Java y sé muy poco acerca de los hilos en Java; ¿Debo pasar los permisos a este nuevo hilo de alguna manera? ¿O algo por el estilo? Gracias de antemano.

Respuesta

3

Probablemente necesite pedir permiso al administrador de seguridad (código, no administrador) para realizar una operación con privilegios. Por diversas razones, generalmente no es bueno que un applet pueda abrir un archivo local, por lo que está bastante protegido.

La clave básica es llamar al AccessController.doPrivileged() y hay un good little tutorial en las preguntas frecuentes de Java Ranch.

+0

doPrivileged es enormemente peligroso. Como es la firma de los applets. –

+3

Como está permitiendo que los applets lean archivos. Sin embargo, está ahí y la respuesta a la pregunta. –

0

Probablemente sea porque el JavaScript no está firmado. Recomiendo encarecidamente no firmar el código, especialmente si no sabes lo que estás haciendo. Desde 6u10 (aún no en Mac), los applets pueden usar JNLP, incluido FileOpenService, por lo que no es necesario que firme.

+0

no JavaScript; Java. – Ricket

+0

La pregunta dice que hay JavaScript involucrado. Mi conjetura es que su JavaScript en el contexto de control de acceso que está causando el problema. –

1

Tuve un problema similar que me llevó mucho tiempo resolver. Resulta que los métodos de applet llamados desde JavaScript no tienen permisos, incluso si los otorga explícitamente en un archivo de política.

Esta solución funcionó para mí (añadir comandos a una cola de los bucles que el applet a través): http://blog.carrythezero.com/?p=5

Asegúrese de que comprende los peligros aquí: Cualquiera puede modificar JavaScript en una página y cambiar lo que está siendo alimentado a la applet. En mi caso, sé que el código nunca va a funcionar en un servidor web, y la clase no está firmada, por lo que fallará a menos que esté en la ubicación específica otorgada por mi archivo de políticas.

Cuestiones relacionadas