Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/03/2011, 11:23
migueljm1977
 
Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 2 meses
Puntos: 0
Excepción SocketPermission

Buenas tardes.

Tengo un Applet que me está dando problemas desde hace unos 10 días, el caso es que funcionaba perfectamente y no se ha modificado nada, de repente dejó de funcionar.

Yo no lo desarrollé pero me ha caido el marrón de solucionarlo, el problema ocurre cuando intenta realizar una conexión de socket a un fichero alojado en el mismo dominio donde se encuentra el Applet.

La excepción que da es la siguiente: java.security.AccessControlException: access denied (java.net.SocketPermission IP_dominio:80 connect,resolve)

He buscado soluciones en Internet y la mayoría hacen referencia al fichero .policy de java, pero no creo que se deba a eso porque por lo que he entendido la seguridad de Java bloquea los accesos a recursos locales de la máquina del cliente y a otros dominios diferentes a donde se descargó el Applet y no es el caso.

El Applet se conecta a un fichero ASP, alojado en el mismo dominio y directorio donde se encuentra el Applet, para escribir y leer cadenas de caracteres.

La verdad es que me estoy desesperando y sobre todo porque esto funcionaba hasta hace dos semanas y ahora no lo hace.

Esta es una función de prueba que he aislado del código completo del Applet para trabajar más cómodo donde se incluye el punto donde se produce la excepción resaltado en rojo.


//INICIO DEL CODIGO .java.

public String prueba()
{

//Se crea la URL.
try
{
m_url = new URL(getCodeBase()+"fichero.asp");
System.out.println("Creando URL: " + getCodeBase()+"fichero.asp");
}
catch( MalformedURLException e1 )
{
//Problema creando la URL
System.out.println("Error creando la URL " + e1.getMessage());
}
//Fin de la creación de la URL.

//Se crea la conexión a la URL.
try
{
m_urlConn = m_url.openConnection();
}
catch(IOException e)
{
System.out.println("Error en la apertura de la conexión: " + e.getMessage());
}
//Fin de la creación de la conexión a la URL.

//Se asigna el valor doOutput de la conexión a verdadero.
m_urlConn.setDoOutput(true);

//Se asigna el valor de la cadena para forzar la operación en el fichero.
//Acción "1" provoca que el fichero escriba el nombre del usuario validado. Por defecto "Usuario1"
String strBuffer = "accion=1";

//Se escribe el dato en la conexion.
try{
OutputStreamWriter wr = new OutputStreamWriter(m_urlConn.getOutputStream());
wr.write(strBuffer);
wr.flush();
wr.close();
}
catch (Exception e)
{
System.out.println(strBuffer);
System.out.println("Excepción en la llamada a Fichero");
System.out.println("Excepcion escritura: "+ e);
}

//Fin de la escritura del dato en la conexion.

//Se lee el dato de la conexion. Con las acciones de escritura el dato leido tiene que ser "Usuario1"
String strInputLine = "";
String strBuffer = "";
try
{
BufferedReader rd = new BufferedReader(new InputStreamReader(m_urlConn.getInputStream()));
String line="",ln;
while ((strBuffer = rd.readLine()) != null) {
System.out.println("\n\n"+strBuffer);
strInputLine = strInputLine + strBuffer;
}
rd.close();
m_strLastErrorNum = "0";
}
catch(IOException ioe)
{
//error de entrada/salida obteniendo datos desde el fichero
System.out.println("Error de entrada/salida en la lectura del dato: "+ ioe.getMessage());
strInputLine = "Error en la lectura del dato";
}
catch(Exception e)
{
//error general obteniendo datos desde el fichero
System.out.println("Strinputline:"+ strInputLine);
strInputLine = "Error obteniendo datos del fichero.";
}

//Fin de la lectura del dato en la conexion.

return strInputLine;
}

//FIN del código .java.

El código de la página de prueba que carga el Applet es el siguiente.

<html>
<head>
<script language="javascript">
function alerta()
{
alert("PRUEBA cargada.");
}

function prueba()
{
var prueba;

prueba=PRUEBA.prueba();
alert(prueba);
}
</script>
</head>
<body onload="javascript:alerta();">
<applet code="PRUEBA.class" Name="PRUEBA" id="PRUEBA" height=0 width=0></applet>
<a href="javascript:prueba();">Prueba</a>
</body>
</html>


En algunos casos aparece una ventana emergente donde se pide un inicio de sesión con el mensaje:

Autenticación necesaria.

Escriba los detalles de inicio de sessión para acceder a: "IP del dominio" en/ "IP del dominio".

Nombre de usuario: "cuadro de texto"

Contraseña: "cuadro de texto"

Esquema de autenticación: básica.


Agradeceré cualquier ayuda u orientación para resolver el problema.

Un saludo a todos.