El funcionamiento general de la gestión de sesiones se explica en esta guía: Gestión de sesiones web
Para el backend hemos creado una librería. Tenemos que añadir la siguiente librería al pom.xml:
<!-- Session FDWJS --> <dependency> <groupId>es.um.atica.fundewebjs</groupId> <artifactId>fundewebjs-session</artifactId> </dependency> |
El problema que comentamos es que la entidad que se utiliza en dicha librería no incluye especificado el esquema, solo el nombre de la tabla (SESSION_STORAGE). Si tenemos dicha tabla en nuestra base de datos, podemos probar a iniciar la aplicación.
Si da error porque no se puede mapear la entidad, probaremos a especificar el esquema en el que se encuentra la tabla añadiendo la siguiente propiedad al application.properties (sustituyendo MIESQUEMA por el tuyo, claro):
spring.jpa.properties.hibernate.default_schema=MIESQUEMA |
Y probaremos de nuevo. Con esto debería funcionar sin problema.
Si aún así diese problemas, tendríamos que añadir las clases de la librería directamente a nuestro proyecto. Podemos ver cómo hacerlo en el siguiente desplegable:
Los pasos a seguir serán:
|
Una vez hecho esto ya podremos usarla, sólo tendremos que utilizar la clase sessionService, incluyéndola con @Autowired:
@Autowired private SessionService sessionService; |
Para poder explotar el ID de sesión en LAGAR, es necesario comprobar que existen las siguientes properties en el application.properties de HelmChart:
|
Para guardar una sesión, tanto si es nueva como si es para sobrescribir una ya existente, utilizaremos el método guardarSesion, al que le pasaremos el id de sesión, el id del usuario, y el contenido de la sesión, ya sea como String o como array de bytes:
// Definición de la función public void guardarSesion( String id, String identificadorUsuario, byte[] contenidoSesion ) // Llamada sessionService.guardarSesion(idSesion, idUsuario, contenido); |
Cada vez que guardamos una sesión, ya sea nueva o sobrescrita, se pone la duración de la misma a media hora, es decir, si pasa media hora desde el momento que la guardamos, caduca.
Para obtener una sesión, utilizamos getSesion o getSesionStr, pasándoles el id de sesión y el id de usuario. La única diferencia es que la primera devuelve un array de bytes, la segunda un String:
// Definición de las funciones public byte[] getSesion( String id, String identificadorUsuario ) public String getSesionStr( String id, String identificadorUsuario ) // Llamada byte[] sesion = sessionService.getSesion(idSesion, idUsuario); String sesion = sessionService.getSesionStr(idSesion, idUsuario); |
Si queremos borrar una sesión explícitamente, llamaraemos a borrarSesion pasándole id de sesión e id de usuario. La operación de borrado se ejecutará de forma asíncrona, por lo que la ejecución seguirá y se evitará el tiempo de espera a que se produzca el borrado.
// Definición de la función public void borrarSesion( String id, String identificadorUsuario ) // Llamada sessionService.borrarSesion(idSesion, idUsuario); |