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]