Observar las Restricciones de la Aplicación

La última parte de la lección Visión Rápida para Controlar Aplicaciones muestra cómo una aplicación puede ser ejecutada bajo un controlador de seguridad llamando al intérprete con el nuevo argumento de la línea de comando -Djava.security.manager. ¿Pero qué pasa si la aplicación reside dentro de un fichero JAR?

Una de las opciones del intérprete es la opción -cp (class path), con la que se especifica un path de búsqueda para las clases de la aplicación y los recursos. Así, por ejemplo, para ejecutar la aplicación Count dentro del fichero JAR sCount.jar, especificando el fichero C:\TestData\data como su argumento, podríamos teclear lo siguiente desde el directorio que contiene sCount.jar:

java -cp sCount.jar Count C:\TestData\data
Para ejecutar la aplicación con un controlador de seguridad, simplemente añadimos -Djava.security.manager, como en
java -Djava.security.manager -cp sCount.jar Count C:\TestData\data
Cuando ejecutemos este comando, deberíamos obtener una excepción:
Exception in thread "main" java.security.AccessControlException:
access denied (java.io.FilePermission C:\TestData\data read)
    at java.security.AccessControlContext.checkPermission(Compiled Code)
    at java.security.AccessController.checkPermission(Compiled Code)
    at java.lang.SecurityManager.checkPermission(Compiled Code)
    at java.lang.SecurityManager.checkRead(Compiled Code)
    at java.io.FileInputStream.(Compiled Code)
    at Count.main(Compiled Code)
Esta AccessControlException esta informando de que la aplicación no tiene permiso para leer el fichero C:\TestData\data. Esta excepción se lanza porque una aplicación que se está ejecutando bajo un controlador de seguridad no puede leer o fichros o acceder a otros recursos a menos que tenga permiso explícito para hacerlo.

Ozito