Auditoria de dados com Spring Data JPA.

O Spring Data JPA fornece de forma muito fácil uma auditoria de quem criou ou editou uma entidade e quando essas alterações aconteceram.

É somente necessário alterar sua classe de entidade, para suportar essa auditoria, isso pode ser feito por anotação ou implementando uma interface.

[markdown]

<!–more–>

Caso opte por utilizar anotações, essas são as seguintes anotações suportadas:

@CreatedBy: Serve para identificar quem criou o registro.

@CreatedDate: Serve para marcar quando foi criado o registro.

@LastModifiedBy: Serve para identificar quem fez a última alteração no registro.

@LastModifiedDate: Serve para marcar quando foi feito a última atualização no registro.

Quando você utiliza as anotações @CreatedBy ou @LastModifiedBy, é necessário informar para a aplicação quem é o usuário autenticado. Para isso é necessário criar uma classe que implemente a interface AuditorAware, o tipo generico T representa o tipo da propriedade que foi anotada na classe de entidade.

Caso a escolha seja utilizar interface, sua classe de entidade deve implementar a interface Auditable, e deve ser implementados os metodos getters e setters das propriedades que estão sendo auditadas. Existe também uma classe AbstractAuditable que pode ser extendida para evitar a implementação dos metodos na classe. O problema de utilizar esse metodo, é que as classes de entidades são alteradas, aumentado o acoplamento, por isso é recomendado utilizar a auditoria por anotações.

Exemplo de uma classe que implementa a interface AuditorAware baseada no Spring Security:

“`

public class SpringSecurityAuditorAware implements AuditorAware<User> {

@Override
public User getCurrentAuditor() {

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

if (authentication == null || !authentication.isAuthenticated()) {
return null;
}

return ((UserAuditDetails) authentication.getDetails()).getUser();
}

}

“`

Para habilitar a auditoria via configuração de classse, é necessário utilizar a anotação @EnableJpaAuditing e criar um @Bean da classe que implementa a interface AuditorAware.

Exemplo de classe de configuração:

“`

@SpringBootApplication
@EnableJpaAuditing
public class SpringDataJpaAuditDemoApplication {

public static void main(String[] args) {
SpringApplication.run(SpringDataJpaAuditDemoApplication.class, args);
}

@Bean
public AuditorAware<User> auditorProvider(){
return new SpringSecurityAuditorAware();
}

}

“`

Você pode encontrar mais informações na documenteção oficial do spring data.

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#auditing

Link do bitbucket com um projeto de exemplo:

https://bitbucket.org/cgferreira87/springdataaudit

Dúvidas ou sugestões, por favor deixe um comentário, espero que tenham gostado e até o próximo post.

 

[/markdown]

One Comment

  1. Kin.LHP

    Boa noite Caio, tudo certo contigo?
    Cara, me tire uma dúvida: na implementação da interface AuditorAware, o tipo deve ser um T que implementa UserDetails?
    Porque aqui não funcionou passando os headers Last-Modified ou If-Modified-Since na requisição GET.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>