¿Configuración de seguridad del applet?

Estoy convirtiendo un JFrame en un applet y obtengo una excepción de seguridad:

C:\prv_workspace_8\DungeonWorldAdventure\bin>appletviewer applet.html
java.security.AccessControlException: access denied ("java.net.SocketPermission"
 "www.student.nada.kth.se:80" "connect,resolve")
        at java.security.AccessControlContext.checkPermission(AccessControlConte
xt.java:366)
        at java.security.AccessController.checkPermission(AccessController.java:
555)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
        at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:456)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:203)
        at sun.net.www.http.HttpClient.New(HttpClient.java:290)
        at sun.net.www.http.HttpClient.New(HttpClient.java:306)

Está tratando de leer fotos de una URL:

// Load an image from the net, making sure it has already been
    // loaded when the method returns
    public Image loadPicture(String imageName) {
        Image im = null;

        // Load the image from the net
        try {
            URL imageSource = new URL(
                    "http://www.student.nada.kth.se/~d99-nro/" + imageName);

            try {
                im = createImage((ImageProducer) imageSource.getContent());
            } catch (IOException e) {
            }

        } catch (MalformedURLException e) {
        }

        // Wait to ensure that the image is loaded
        MediaTracker imageTracker = new MediaTracker(this);
        imageTracker.addImage(im, 0);
        try {
            imageTracker.waitForID(0);
        } catch (InterruptedException e) {
        }

        return im;
    }

¿Alguna idea de cómo puedo hacer que esto funcione? ¿Necesito un java.policy¿expediente? Si es así, ¿cómo hago para que este subprograma funcione en una página web?

preguntado el 04 de julio de 12 a las 07:07

} catch (IOException e) { } En caso de que el código se rompa por alguna razón, el mucho menos que se debe hacer para cada captura es } catch (IOException e) { e.printStackTrace(); } -

@Andrew Thompson Estoy de acuerdo, ese código me fue heredado. Siempre manejo todas las excepciones y errores correctamente. -

1 Respuestas

¿Alguna idea de cómo puedo hacer que esto funcione?

Se debe confiar en un subprograma para leer dominios cruzados. O eso o un archivo en un lugar específico en el servidor externo que permite el acceso entre dominios, dudo que el visor de applets sea lo suficientemente sofisticado como para hacer la distinción, por lo que sería mejor probarlo en una página web.

Para obtener más detalles sobre el acceso entre dominios, consulte:

¿Necesito un archivo java.policy?

No. Eso no funcionará (no es práctico) implementarlo en la red, por lo que no vale la pena intentarlo.


Estoy convirtiendo un JFrame en un applet.

Probablemente sea una mejor idea lanzar el marco usando Java Web Start. Se aplicarán las mismas restricciones de seguridad, pero un marco flotante (y redimensionable) suele ser mejor para mostrar imágenes. Tampoco requiere conversión de código y, en general, es más fácil de mantener: los applets causan más problemas de mantenimiento que las aplicaciones JWS.

Lo haré con Java Web Start. Leí que puedo firmar mi aplicación y luego puede leer archivos. ¿No debería ser fácil? Veo que otros desarrolladores tuvieron problemas para que sus applets cargaran archivos y luego se les recomendó usar un applet firmado, ¿quizás haya algo similar para Java Web start?

Prácticamente lo mismo. Los Jar deben estar firmados digitalmente si se hace referencia a ellos en cualquier archivo de inicio (un JNLP, Similar a applet elemento en HTML pero con más opciones) o cualquier extensión (también un JNLP) que solicita permisos extendidos (hay 3 niveles o privilegios en JWS).

Otra alternativa es utilizar los servicios de archivos de la API de JNLP para acceder al sistema de archivos local desde una aplicación de espacio aislado, pero eso requeriría cambios en el código. Aquí hay un manifestación. de los servicios de archivo.

contestado el 23 de mayo de 17 a las 11:05

¡Gracias! Lo haré con Java Web Start. Leí que puedo firmar mi aplicación y luego puede leer archivos. ¿No debería ser fácil? Veo que otros desarrolladores tuvieron problemas para que sus applets cargaran archivos y luego se les recomendó usar un applet firmado, ¿quizás haya algo similar para Java Web start? - Niklas Rosencrantz

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.