Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Tabla de contenidos

...

Advertencia
titleError conocido

Si es necesario especificar el esquema en el que se encuentra la tabla SESSION_STORAGE, no se encontrará la tabla, por lo que saltará un error. Estamos intentando parametrizar el esquema, o buscar una alternativa para ello. La alternativa provisional es quitar la dependencia y añadir las clases de la librería directamente al proyecto: es.um.atica.fundewebjs.session.rar

El funcionamiento general de la gestión de sesiones se explica en esta guía: Gestión de sesiones web

Instalación

Para el backend , hemos hecho creado una librería que contiene lo necesario para leer y escribir en nuestra tabla de sesiones, siguiendo la misma estructura que se indica en la guía anterior.Para añadirla a nuestro proyecto, en primer lugar tendremos que añadir la dependencia. Tenemos que añadir la siguiente librería al pom.xml:

Bloque de código
languagexml
       		<!-- Session FDWJS -->
       <dependency>
            
		<dependency>
			<groupId>es.um.atica.fundewebjs.fundewebjs-api<fundewebjs</groupId>
           			<artifactId>fundewebjs-session</artifactId>
           <version>${fdwjs.version}</version>
       </dependency>		</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)Además en la clase inicial de nuestra aplicación, tendremos que añadir las anotaciones @EnableJpaRepositories y @EntityScan, indicando los mismos paquetes que tenemos en @SpringBootApplication, de modo que quede así:

Bloque de código
languagejava
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:

Expandir
titleIncluir clases de librería de sesiones en nuestro proyecto

Los pasos a seguir serán:

@SpringBootApplication( scanBasePackages = { "
  1. Descargamos las clases y las añadimos al proyecto:
  1. es.um.atica
.backendprueba", "
  1. .fundewebjs.session.rar. Vienen directamente con la estructura de carpetas para que se encuentren en el paquete es.um.atica.fundewebjs
", } ) @EnableJpaRepositories( basePackages = { "
  1. , y debemos incluirlo así en nuestro proyecto.

  2. Como estarán en el paquete es.um.atica.

backendprueba", "
  1. fundewebjs, debemos tener esa ruta en la anotación @SpringBootApplication de la clase inicial de nuestro proyecto (es.um.atica.

fundewebjs", } ) @EntityScan( {
  1. ---- será el paquete por defecto de nuestro proyecto):

    Bloque de código
    languagejava
    @SpringBootApplication( scanBasePackages = {
    		"es.um.atica.
backendprueba
  1. ----", "es.um.atica.fundewebjs",
    } )
public class BackendpruebaApplication { public static void main(String[] args) { SpringApplication.run(BackendpruebaApplication.class, args); } }

...


  1. Añadir a la entidad SessionStorage.java el esquema en la anotación @Table, así:

    Bloque de código
    languagejava
    @Table( schema = "MIESQUEMA", name = "SESSION_STORAGE" )


Uso

Una vez hecho esto ya podremos usarla, sólo tendremos que utilizar la clase sessionService, incluyéndola con @Autowired:

...

Info

Para poder explotar el ID de sesión en LAGAR, es necesario añadir la dependencia fundewebjs-lagar en el pom.xml y configurar comprobar que existen las siguientes properties en el application.properties de HelmChart:

# FundeWebJS Habilitar filtro para cabeceras en logs MDC de lagar
fdwjs.api.lagar.enable=true
fdwjs.api.lagar.headers=UMU-User-UUID,UMU-Client-APP,UMU-User-SessionID


Guardar sesión

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:

...

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.

Obtener sesión

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:

Bloque de código
languagejava
// 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);

Borrar sesión

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.

...