Introducción a los Controladores de Seguridad
Toda aplicación Java puede tener su propio objeto controlador de seguridad que actúa como un
guardia de seguridad a tiempo completo. La clase SecurityManager del paquete java.lang es una
clase abstracta que proporciona el interface de programación y una implementación parcial para
todos los controladores de seguridad de Java.
Por defecto una aplicación no tiene controlador de seguridad. Esto es, el sistema de ejecución
de Java no crea automáticamente un controlador de seguridad para cada aplicación. Entonces, por
defecto, una aplicación permite todas las operaciones que están sujetas a las restricciones de
seguridad.
Para cambiar este comportamiento indulgente, una aplicación debe crear e instalar su propio
controlador de seguridad. Aprenderás como crear un controlador de seguridad en
Escribir un Controlador de Seguridad,
y como instalarlo en
Instalar un Controlador de Seguridad.
|
Nota:
Los navegadores existentes y los visualizadores de applets crean su propio
controlador de seguridad cuando arrancan. Así, un applet está sujeto a las restricciones de
acceso siempre que sean impuestas por el controlador de seguridad de una aplicación particular
en la que el applet se está ejecutando.
|
Puedes obtener el controlador de seguridad actual de una aplicación utilizando el método
getSecurityManager() de la clase System.
SecurityManager appsm = System.getSecurityManager();
Observa que getSecurityManager() devuelve null si no hay ningún controlador
de seguridad actual en la aplicación por lo que debería asegurarse de que tiene un objeto válido
antes de llamar a cualquiera de sus métodos.
Una vez que tienes el controlador de seguridad, puedes pedir permiso para permitir o prohibir
ciertas operaciones. De hecho, muchas de las clases en los paquetes de Java hacen esto. Por
ejemplo, el método System.exit(), que finaliza el interprete Java, utiliza
el método checkExit() del controlador de seguridad para aprobar la
operación de salida.
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkExit(status);
}
. . .
// El código continúa aquí si checkedExit() retorna
Si el controlador de seguridad aprueba la operación de salida, el
checkExit() retorna normalmente. Si el controlador de seguridad prohibe la
operación, el checkExit() lanza una SecurityException. De esta forma, el
controlador de seguridad permite o prohibe una operación potecialmente dañina antes de que pueda
ser completada.
La clase SecurityManager define muchos otros métodos utilizados para verificar otras clases de
operaciones. Por ejemplo, el método checkAccess() verifica los accesos a
los threads, y checkPropertyAccess() verifica el acceso a la propiedad
especificada. Cada operación o grupo de operaciones tiene su propio método
checkXXX().
Además, el conjunto de métodos checkXXX() representa el
conjunto de operaciones de las clases de los paquetes Java y el sistema de ejecución de Java que
ya están sujetos a la protección del controlador de seguridad. Por eso, normalmente, su código
no tendrá que llamar a ningún método checkXXX() -- las
clases de los paquetes de Java hacen esto por usted a un nivel lo suficientemente bajo que
cualquier operación representada por un método
checkXXX() ya está protegida. Sin embargo, cuando
escribas tu propio controlador de seguridad, podrías tener que sobreescribir los métodos
checkXXX() de SecurityManager para modificar la
política de seguridad de las operaciones específicas, o podría tener que añadir algunos por ti
mismo para poner otras clases de operaciones para el escurtinio del controlador de seguridad.
Decidir los Métodos a Sobreescribir de
SecurityManager explica las operaciones o grupos de operaciones que cada método
checkXXX() de la clase SecurityManager está diseñado
para proteger.