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

Excepción SocketPermission

Estas en el tema de Excepción SocketPermission en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/03/2011, 11:23
 
Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 1 mes
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.
  #2 (permalink)  
Antiguo 23/03/2011, 16:20
 
Fecha de Ingreso: marzo-2010
Mensajes: 18
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Excepción SocketPermission

Pueden ser permisos de red, valida con un telenet el acceso, por eso no se puede conectar,
dependiendo donde este el recurso, prueba:

$)telnet ip_donde_esta puerto // Esto desde la máquina donde esta el applet

De ahí sabrás que puede estar fallando, permisos de red o hasta el usuario que accede a ese recurso, recuerda que es un recurso compartido en la red.
Saludos!!!

Etiquetas: socketpermission
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 06:59.