Para escribir tu propio controlador de seguridad, debes crear una subclase de la clase SecurityManager. Esta subclase sobreescribe varios m�todos de SecurityManager para personalizar las varificaciones y aprobaciones necesarias para una aplicaci�n Java.
Esta p�gina te lleva a trav�s de un controlador de seguridad de ejemplo que restringe la lectura y escritura en el sistema de ficheros. Para obtener la aprobaci�n del controlador de seguridad, un m�todo que abra un fichero para leer invoca uno de los m�todos checkRead() de SecurityManager, un m�todo que abre un fichero para escribir invoca a uno de los m�todos checkWrite() se SecurityManager. Si el controlador de seguridad aprueba la operaci�n el m�todo checkXXX() retorna nomalmente, de otra forma checkXXX() lanza una SecurityException.
Para imponer una pol�tica restrictiva en los accesos al sistema de ficheros, nuestro ejemplo debe sobreescribir los m�todos checkRead() y checkWrite() de SecurityManager. SecurityManager proporciona tres versiones de checkRead() y dos versiones de checkWrite(). Cada una de ellas deber�a verificar si la aplicaci�n puede abrir un fichero para I/O. Una pol�tica implementada frecuentemente en los navegadores para que los applets cargados a trav�s de la red no puedan leer o escribir en el sistema local de ficheros a menos que el usuario lo apruebe.
La pol�tica implementada por nuestro ejemplo le pide al usuario una password cuando la aplicaci�n intenta abrir un fichero para leer o escribir. Si la password es correcta se permite el acceso.
Todos los controladores de seguridad deben ser una subclase de SecurityManager. As�, nuestra PasswordSecurityManager desciende de SecurityManager.
class PasswordSecurityManager extends SecurityManager {
. . .
}
Luego, PasswordSecurityManager declara un ejemplar de la variable privada password para contener el password que el usuario debe introducir para poder permitir el acceso al sistema de ficheros restringido. La password se selecciona durante la construcci�n.
PasswordSecurityManager(String password) {
super();
this.password = password;
}
El siguiente m�todo en la clase PasswordSecurityManager es un m�todo de ayuda privado llamado accessOK(). Este m�todo le pide al usuario una password y la verifica. Si el usuairo introduce una password v�lida, el m�todo devuelve true, de otra forma devuelve false.
private boolean accessOK() {
int c;
DataInputStream dis = new DataInputStream(System.in);
String response;
System.out.println("What's the secret password?");
try {
response = dis.readLine();
if (response.equals(password))
return true;
else
return false;
} catch (IOException e) {
return false;
}
}
Finalmente al final de la clase PasswordSecurityManager hay tres m�todos checkRead() y dos m�todos checkWrite() sobreescritos.
public void checkRead(FileDescriptor filedescriptor) {
if (!accessOK())
throw new SecurityException("Not a Chance!");
}
public void checkRead(String filename) {
if (!accessOK())
throw new SecurityException("No Way!");
}
public void checkRead(String filename, Object executionContext) {
if (!accessOK())
throw new SecurityException("Forget It!");
}
public void checkWrite(FileDescriptor filedescriptor) {
if (!accessOK())
throw new SecurityException("Not!");
}
public void checkWrite(String filename) {
if (!accessOK())
throw new SecurityException("Not Even!");
}
Todos los m�todos checkXXX() llaman a accessOK() para pedirle al usuario la password. Si el acceso no es OK, entonces checkXXX() lanza una SecurityException. De otra froma, checkXXX() retorna normalmente. Observa que SecurityException es una excepci�n en tiempo de ejecuci�n, y no necesita ser declarada en la clausula throws de estos m�todos.
checkRead() y checkWrite() son s�lo unos pocos de los muchos m�todos checkXXX() de SecurityManager que verifican varias clases de operaciones. Puedes sobreescribir o a�adir cualquier n�mero de m�todos checkXXX() para implementar tu propia pol�tica de seguridad. No necesitas sobreescribir todos los m�todos checkXXX() de SecurityManager, s�lo aquellos que quieras personalizar. Sin embargo, la implementaci�n por defecto proporcionada por la clase SecurityManager para todos los m�todos checkXXX() lanza una SecurityException. En otras palabras, por defecto, la clase SecurityManager prohibe todas las operaciones que est�n sujetas a las restricciones de seguridad. Por lo que podr�as encontrar que tienes que sobreescribir muchos m�todos checkXXX() para obtener el comportamiento deseado.
Todos los m�todos checkXXX() de la clase SecurityManager operan de la misma forma.
- Si el acceso est� permitido, el m�todo retorna.
- Si el acceso no est� permitido, el m�todo lanza una SecurityException.
Asegurate de que implementas de esta forma tus m�todos checkXXX() sobreescritos.
Bien, esta es nuestra subclase de SecurityManager. Como puedes ver implementar un controlador de seguridad es sencillo, s�lo:
- Crea una subclase de SecurityManager.
- Sobreescribe unos cuantos m�todos.
El truco est� en determinar los m�todos que se deben sobreescribir para implementar tu pol�tica de seguridad. Decidir que M�todos Sobreescribir de SecurityManager te ayudar� a decidir los m�todos que deber�s sobreescribir dependiendo de los tipos de operaciones que quieras proteger. La p�gina siguiente te ense�a como instalar la clase PasswordSecurityManager como el controlador de seguridad de su aplicaci�n Java.
�Tambi�n puede ver