viernes, 14 de octubre de 2011

Aplicaciones Web que usan distintas versiones de Java

Posible problema:

Necesitamos acceder a dos aplicaciones Web que usan dos versiones distintas de Java, la primera funciona únicamente con Java 1.4.2 (por ejemplo) y la segunda con Java 1.6 update 27 (o cualquier otra versión más reciente que la del primer ejemplo).

¿Como lo hacemos? Siguiendo estos pasos:

1.- Instalamos Java 1.4.2 (o el más antiguo)*.

2.- Instalamos Java 1.6 Update 27 (o el más nuevo)*.

3.- En caso de que sea necesario instalaremos Webpki o Multiwebpki (algunas aplicaciones lo requieren).

4.- En la carpeta de instalación de Java**, localizamos el archivo java.policy, lo abrimos con el bloc de notas, borramos todo su contenido y en su lugar copiamos lo siguiente:

grant {
  permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
  permission java.lang.RuntimePermission "accessClassInPackage.sun.security.pkcs11";
  permission java.security.AllPermission; 
  permission java.security.SecurityPermission "insertProvider.SunPKCS11-CardOS";
  permission java.security.SecurityPermission "removeProvider.SunPKCS11-CardOS";
  permission java.security.SecurityPermission "authProvider.SunPKCS11-CardOS";
  permission java.util.PropertyPermission "org.apache.commons.logging.LogFactory.HashtableImpl", "read";
  permission java.util.PropertyPermission "user.home", "read";
  permission java.io.FilePermission "<<ALL FILES>>", "read";
};

// Standard extensions get all permissions by default

grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};

// default permissions granted to all domains

grant {
// Allows any thread to stop itself using the java.lang.Thread.stop()
// method that takes no argument.
// Note that this permission is granted by default only to remain
// backwards compatible.
// It is strongly recommended that you either remove this permission
// from this policy file or further restrict it to code sources
// that you specify, because Thread.stop() is potentially unsafe.
// See "http://java.sun.com/notes" for more information.
permission java.lang.RuntimePermission "stopThread";

// allows anyone to listen on un-privileged ports
permission java.net.SocketPermission "localhost:1024-", "listen";

// "standard" properies that can be read by anyone

permission java.util.PropertyPermission "java.version", "read";
permission java.util.PropertyPermission "java.vendor", "read";
permission java.util.PropertyPermission "java.vendor.url", "read";
permission java.util.PropertyPermission "java.class.version", "read";
permission java.util.PropertyPermission "os.name", "read";
permission java.util.PropertyPermission "os.version", "read";
permission java.util.PropertyPermission "os.arch", "read";
permission java.util.PropertyPermission "file.separator", "read";
permission java.util.PropertyPermission "path.separator", "read";
permission java.util.PropertyPermission "line.separator", "read";

permission java.util.PropertyPermission "java.specification.version", "read";
permission java.util.PropertyPermission "java.specification.vendor", "read";
permission java.util.PropertyPermission "java.specification.name", "read";

permission java.util.PropertyPermission "java.vm.specification.version", "read";
permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
permission java.util.PropertyPermission "java.vm.specification.name", "read";
permission java.util.PropertyPermission "java.vm.version", "read";
permission java.util.PropertyPermission "java.vm.vendor", "read";
permission java.util.PropertyPermission "java.vm.name", "read";
};


Otra alternativa: En lugar de editar el archivo java.policy, también podemos borrarlo o renombrarlo y crear uno completamente nuevo que contenga el código arriba indicado.

5.- Guardamos cambios (cuidado en no cambiar la extensión del archivo, que deberá seguir siendo .policy) y cerramos.

6.- Procedemos a acceder a ambas aplicaciones Web y si todo ha ido bien, lo haremos sin problemas.

*NOTA: En la web oficial de ORACLE hay un repositorio con todas las versiones de Java cuya descarga es completamente gratuita.

**NOTA2: Normalmente el archivo java.policy suele encontrase en:
C:\Program Files (x86)\Java\jre6\lib\security (o similar).

2 comentarios:

Anónimo dijo...

Hola... Probé el script y funciona en sistemas operativos Win 8 y 10, pero en XP no me funciona.

Unknown dijo...

Pero debo de hacerlo solamente en una de las versiones la modificación del fichero java.policy o en todas las versiones que tenga??

Publicar un comentario