## Decidir los Métodos a Sobreescribir del SecurityManager

Podrías tener que sobreescribir varios métodos checkXXX() del SecurityManager dependiendo de las operaciones a las que quieras que el controlador de seguridad les imponga restrcciones.

La primera columna de la siguiente tabla son objetos sobre los que se pueden realizar varias operaciones. La segunda columna lista los métodos de SecurityManager que aprueban las operaciones de los objetos de la primera columna.

Operaciones sobre | Aprovadas por
sockets | checkAccept(String host, int port) checkConnect(String host, int port) checkConnect(String host, int port, Object executionContext) checkListen(int port)
threads | checkAccess(Thread thread) checkAccess(ThreadGroup threadgroup)
class loader | checkCreateClassLoader()
sistema de ficheros | checkDelete(String filename) checkLink(String library) checkRead(FileDescriptor filedescriptor) checkRead(String filename) checkRead(String filename, Object executionContext) checkWrite(FileDescriptor filedescriptor) checkWrite(String filename)
comandos del sistema | checkExec(String command)
interprete | checkExit(int status)
paquete | checkPackageAccess(String packageName) checkPackageDefinition(String packageName)
propiedades | checkPropertiesAccess() checkPropertyAccess(String key) checkPropertyAccess(String key, String def)
networking | checkSetFactory()
windows | checkTopLevelWindow(Object window)

Dependiendo de tu política de seguridad, puedes sobreescribir algunos o todos estos métodos. Por ejemplo, supon que estás escribiendo un Navegador Web o un visualizador de applets y quieres evitar que los applets utilicen sockets. Puedes hacer esto sobreescribiendo los cuatro métodos que afectan al acceso a los sockets.

Muchos de los métodos checkXXX() son llamados en múltiples situaciones. Ya viste esto cuando escribimos el PasswordSecurityManager en Escribir un Controlador de Seguridad -- el método checkAccess(ThreadGroup g) es llamado cuando se crea un ThreadGroup, selecciona su estado de servicio, lo para, etc. Cuando sobreescribas un método checkXXX() asegurate de que comprendes todas las situaciones en las que puede ser llamado.

La implementación por defecto suministrada por la clase SecurityManager para todos los métodos checkXXX() es:

    public void checkXXX(. . .) {
        throw new SecurityException();
    }

La mayoría de las veces querráa que haga algo más selectivo que prohibirlo todo! Por eso podrías encontrar que debes sobresscribir todos los métodos checkXXX() de SecurityManager.

Ozito