Foros del Web » Programación para mayores de 30 ;) » Java »

Permisos Para Applets

Estas en el tema de Permisos Para Applets en el foro de Java en Foros del Web. Hola a todos, tengo un problema urgente con los permisos de java. Tengo una aplicacion en applets que necesita grabar datos en una base de ...
  #1 (permalink)  
Antiguo 06/02/2007, 11:32
 
Fecha de Ingreso: enero-2007
Mensajes: 2
Antigüedad: 17 años, 3 meses
Puntos: 0
Permisos Para Applets

Hola a todos, tengo un problema urgente con los permisos de java.
Tengo una aplicacion en applets que necesita grabar datos en una base de datos en Oracle el problema es que no me lo permite y me aparecen las excepciones de socketPermission y AccessPermission.
Ya he hecho de todo desde manejar el java.policy hasta tratar de firmar el applet pero nada funciona, alguien podria enviarme un ejemplo para resolver este problema, se los voy a agradecer mucho
  #2 (permalink)  
Antiguo 07/02/2007, 02:33
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Permisos Para Applets

Hola Edwin, para abrir conexiones con un host remoto desde un applet necesitarás dos cosas: firmar el applet y redefinir el manejador de seguridad de tu aplicación (SecurityManager). Los applets cargan un manejador por seguridad por defecto que no te permite acceder a recursos de la máquina en la que se ejecuta ni abrir puertos por supuesto. Es una clase con una serie de métodos que se pueden redefinir.

Te pongo un ejemplo que te podría servir:
Código:
import java.security.Permission;

public class MySecurityManager extends SecurityManager {

	//Host con el que nos vamos a comunicar
	private String remoteHost;
	
	//Puerto
	private int portAcces;
	
	public MySecurityManager(String url, int port)
	{
		super();
		remoteHost = url;
		portAcces = port;
	}
	
	public void checkAccept(String host, int port)
	{
		if(!host.equals(this.remoteHost) || (port != this.portAcces && port != 80))
			super.checkAccept(host, port);
	}
	
	public void checkAccept(String host, int port, Object execute)
	{
		if(!host.equals(this.remoteHost) || (port != this.portAcces && port != 80))
			super.checkAccept(host, port);
	}
	
	public void checkConnect(String host, int port)
	{
		if(!host.equals(this.remoteHost) || (port != this.portAcces && port != 80))
			super.checkAccept(host, port);
	}
	
	public void checkConnect(String host,int port, Object executionContext)
	{
		if(!host.equals(this.remoteHost) || (port != this.portAcces && port != 80))
			super.checkAccept(host, port);
	}
	
	public void checkPermission(Permission p)
	{
		
	}
	
	public void checkListen(int port)
	{
		
	}
	
	public void checkSetFactory()
	{
		
	
	}
	
	public void checkSecurityAccess()
	{
		
	}
	
	
}

En este ejemplo se permite acceso al host y puerto que especifiques en el constructor. Hay métodos vacios para evitar que se ejecute el código de la clase padre.

Una vez que tengas esto, simplemente al cargar el applet tienes que especificar tu nuevo manager de seguridad:

Código:
try 
		{
			System.setSecurityManager(new MySecurityManager("http://"+ this.getCodeBase().getHost(),41000));
		} 
		catch (SecurityException se)
		{
			System.out.println("Error al cargar manager seguridad");
		}
A ver si con esto te vale.

De todas formas, como ya te he comentado antes, también tendrás que firmar el applet y esto creará inseguridad en los usuarios. Yo optaría por trasladar el acceso a la base de datos a un servlet en tu servidor y comunicarte con este desde el applet mediante serialización de objetos
  #3 (permalink)  
Antiguo 07/02/2007, 12:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Permisos Para Applets

Ummmm, seguro que lo puedes hacer así, Valkan? Creía que para utilizar el metodo "setSecurityManager" ya necesitas tener permisos especiales de seguridad, al menos a partir de la version de Java 1.2, así que tendrías un problema del huevo o la gallina primero. No digo que no se pueda hacer, siempre se aprenden cosas nuevas, pero no lo he visto hacer así desde hace muchas versiones de Java.

Lo que si he visto hacer es instalar un fichero que especifique una "Security Policy" donde le des los permisos adecuados al applet etc. Como se describe aquí:
http://www.informit.com/articles/art...&seqNum=2&rl=1

S!
  #4 (permalink)  
Antiguo 08/02/2007, 02:46
Avatar de Valkam  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla
Mensajes: 157
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Permisos Para Applets

Cita:
Iniciado por GreenEyed Ver Mensaje
Creía que para utilizar el metodo "setSecurityManager" ya necesitas tener permisos especiales de seguridad, al menos a partir de la version de Java 1.2, así que tendrías un problema del huevo o la gallina primero.
En efecto para ejecutar ese método ya de por si se necesitan ciertos privilegios de ejecución para el applet. Por eso, como comentaba en el anterior mensaje, es necesario firmar digitalmente el applet primero.
Firmando el applet, la JRE te permite hacer llamadas a métodos en ciertos niveles de seguridad, pero no en todos. La solución que propones usando un fichero de policía o de permisos también es válida, pero igualmente tienes que firmar el applet para que te permita escribir el fichero en la máquina cliente en una ruta donde sea capaz de cargarlo.

Yo he tenido problemas similares a los de edwin en los que no me bastaba con firmar el applet y los he solucionado redefiniendo el manager de seguridad bajo java 1.4.

No se, a mi me funcionó. Un Saludo
  #5 (permalink)  
Antiguo 08/02/2007, 08:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Permisos Para Applets

Bueno es saberlo, gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:32.