Auditoría con anotaciones en Spring Data

Auditoría con Spring Data

Auditoría con Spring Data


En esta nueva entrada sobre Auditoría con anotaciones en Spring Data, vamos a ver como podemos auditar algunos campos de nuestra tabla haciendo uso únicamente de anotaciones. En esta entrada anterior además vimos como podemos realizar un proyecto con Spring Data.

Estas anotaciones están inspirados en triggers de SQL los cuáles lanzaran un evento que realizaran la insercción requerida en Base de Datos.

Auditar con Spring Data JPA

Añadir dependencia Spring Data en Maven

Spring Data es un módulo de Spring que extiende de JPA, es decir, añade las funcionalidades de JPA y nos abstrae de ellas. Para poder añadir Spring Data en nuestra aplicación añadimos la siguiente dependencia maven:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
</dependency>

Activar auditoría JPA

Lo primero que tenemos que hacer para poder añadir auditoría en nuestra aplicación con Spring Data es activarla.

Para poder activar la auditoría vamos a añadir @EnableJpaAuditing en nuestra clase @Configuration.

@Configuration
@EnableJpaRepositories
@EnableJpaAuditing
public class SpringDataConfig { ... }

Añadir Entity Listener

A continuación vamos a añadir un @EntitlyListeners, para capturar y auditar información en la persistencia y actualización de nuestras entidades. En este proceso nos ayudará la clase ya creada de Spring AuditingEntityListener. Y la configuración será de la siguiente manera:

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Car { ... }

Fecha de creación y actualización de manera automática con Spring Data

Dos de las anotaciones que más se usan con Spring Data son sin duda @CreatedDate y @LastModifiedDate. Estas dos anotaciones añadirán la fecha de creación del registro y la fecha de modificación del registro de una manera automática.

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Car {
    
    @Id
    private Long id;
    
    @Column(name = "created_date")
    @CreatedDate
    private long createdDate;

    @Column(name = "modified_date")
    @LastModifiedDate
    private long modifiedDate;
    
    //...
    
}

Añadir creación de fecha y actualización de fecha a todas nuestras entidades

Por lo general, vamos a querer que la actualización y creación de fechas se realize en todas nuestras entidades. Para estos casos, podemos hacerlo mediante herencia en una única clase haciendo uso de la anotación @MappedSuperClass.

@MappedSuperclass
@Getter
@Setter
public class Audit {
 
    @Column(name = "created_date")
    @CreatedDate
    private long createdDate;

    @Column(name = "modified_date")
    @LastModifiedDate
    private long modifiedDate;
 
}

@Getter
@Setter
@Entity
public class Car extends Audit {
 
    private String model;
 
....
}

Auditar el autor cuando hay Spring Security

Cuando tenemos activado Spring Security en nuestra aplicación, no solo podemos autorizar y autenticar a un usuario. También podemos auditar en nuestra base de datos quién esta realizando las modificaciones o creando un registro.

Para poder realizar la auditoría del usuario tenemos que hacer uso de dos anotaciones diferentes, por un lado @CreatedBy y por otro lado @LastModifiedBy. Estos dos campos se rellenarán con el Principal de Spring Security.

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Car {
       
    @Column(name = "created_by")
    @CreatedBy
    private String createdBy;

    @Column(name = "modified_by")
    @LastModifiedBy
    private String modifiedBy;
    
    
}

En muchas ocasiones vemos a querer añadir una lógica adicional cuando se vaya a guardar la información del usuario. En esos casos vamos a implementar AuditorAware, con el que podemos sobre escribir alguno de sus métodos y añadir la información que necesitemos.

public class AuditorAwareImpl implements AuditorAware<String> {
 
    @Override
    public String getCurrentAuditor() {
        // here more code
    }

}

Para poder hacer uso de la funcionalidad de AuditorAware, vamos a tener que activar la autidoría de JPA con el auditorProvider, @EnableJpaAuditing(auditorAwareRef=»auditorProvider») y un bean de este tipo para poder realizar la inicialización de la clase.

@EnableJpaAuditing(auditorAwareRef="auditorProvider")
public class SpringDataConfig {
    
    @Bean
    AuditorAware<String> auditorProvider() {
        return new AuditorAwareImpl();
    }     
    
}

Conclusión

En esta entrada de Auditoría con anotaciones en Spring Data, hemos podido ver el uso de diferentes anotaciones con Spring Boot que nos ayudarán y nos facilitarán nuestro trabajo de auditar los datos. Sin duda, será una de las funcionalidades de Spring Data que más usarás en tus proyectos.

En este enlace de nuestro github puedes encontrar un ejemplo.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com y te ayudaremos encantados!


No te olvides de seguirnos en nuestras redes sociales Facebook o Twitter para estar actualizado.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *