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