Hola.
Para una aplicación que desarrollo en mi trabajo, necesito mandar una página web a un navegador. Ésta contiene un japplet. El requisito es que el usuario sólo sepa la ip del host que manda el applet, no ha de saber nada de la base de datos, la configuración que en ésta se guarda...
Tenía una versión anterior que probé en una intranet, similar al entorno que va destinado: en un equipo se solicitaba el applet, que mandaba el equipo servidor. El applet no estaba empaquetado en un jar ni en un jni, tiraba directamente de decenas de class y consultaba ficheros xml de configuración en el equipo servidor, es decir el applet buscaba éstos en el localhost del servidor. Con esto quiero decir que el applet no accedía al equipo del usuario o agente web.
Ahora, la versión que implemento tira de una bd donde se guarda la configuración, empaquetada aquélla dentro del jar que se ejecuta, Es una sqlite (la versión con postgres falla igual). Sé que no puede accederse igual a un recurso empaquetado en un jar que a un fichero, pero no sé la manera de acceder a un recurso que es una bd, porque ha de hacerse una conexión a ésta y no cargar un fichero.
En cualquier caso, falla al conectarse a la bd: intenta acceder para leer sin permisos al directorio user.dir. La bd no está en ese directorio, sino empaquetada en el jar. Entiendo que user.dir está bloqueado porque es el directorio del equipo cliente (en mis pruebas, cliente y servidor son el mismo). He intentado añadir permission java.util.PropertyPermission "${user.home}", "read"; al java.policy pero otra aplicación me lo bloquea, y sigue pasando aún parando jre7. No es eso lo que debería hacer, pues es un peligro en la seguridad. Tampoco debería pasar, porque en la versión anterior, sin empaquetar, no accedía a los recursos del cliente.
He probado a cambiar el codebase del tag applet y no funciona: he puesto './' y 'http://localhost/html/', siendo la carpeta html en realidad un acceso directo a la carpeta de apache donde tengo el jar, todo esto con intención de que no busque en user.dir. Así lo tengo ahora:
<applet
codebase = "http://localhost/"
code = "common/MyApplet.class"
archive = "udpview.jar"...>
</applet>
Este es parte del código que la consola de java de los navegadores me da:
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.dir" "read")
at java.security.AccessControlContext.checkPermission (Unknown Source)
at java.security.AccessController.checkPermission(Unk nown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unkn own Source)
at java.lang.System.getProperty(Unknown Source)
at java.io.Win32FileSystem.getUserPath(Unknown Source)
at java.io.Win32FileSystem.resolve(Unknown Source)
at java.io.File.getAbsolutePath(Unknown Source)
at java.io.File.getAbsoluteFile(Unknown Source)
at org.sqlite.Conn.<init>(Conn.java:42)
at org.sqlite.JDBC.connect(JDBC.java:64)...
Falla en:
cnx = getConnection("org.sqlite.JDBC", "jdbc:sqlite:.\\BCS3_LOCAL.ewpro", "MyUser", "MyKey"); // pero puede hacerse sin usuario ni clave.
concretamente en el código de getConnection siguiente:
...Class.forName(driverClass); // carga bien la clase
return DriverManager.getConnection(bd); //, user, password); Aquí es donde falla.
Necesito consejo, gracias de antemano.