Decidir qué Métodos 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 |
Aprobadas 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, supón 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.