Spring Data提供支持审计功能:即由谁在什么时候创建或修改实体。Spring Data提供了在实体类的属性上增加@CreatedBy,@LastModifiedBy,@CreatedDate,@LastModifiedDate注解,并配置相应的配置项,即可实现审计功能,有系统自动记录createdBy
CreatedDate
lastModifiedBy
lastModifiedDate
四个属性的值,下面为具体的配置项。
示例
创建一个实体类
package com.hfcsbc.infrastructureservice.domain;
import com.hfcsbc.repository.support.domain.AbstractAuditingEntity;
import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
/**
* Create by pengchao on 2018/3/7
*/
@Entity
@Data
@EntityListeners({AuditingEntityListener.class})
public class Person {
@Id
@GeneratedValue
private Long id;
private String name;
private Integer age;
@CreatedBy
@Column(
name = "created_by",
nullable = false,
length = 50,
updatable = false
)
private String createdBy;
@CreatedDate
@Column(
name = "created_date",
nullable = false,
updatable = false
)
private Date createdDate = new Date();
@LastModifiedBy
@Column(
name = "last_modified_by",
length = 50
)
private String lastModifiedBy;
@LastModifiedDate
@Column(
name = "last_modified_date"
)
private Date lastModifiedDate = new Date();
}
创建相应的Repository
package com.hfcsbc.repository;
import com.hfcsbc.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Create by pengchao on 2018/3/7
*/
public interface PersonRepository extends JpaRepository<Person, Long> {
}
配置获取用户信息的bean
package com.hfcsbc.infrastructureservice.config;
import org.springframework.data.domain.AuditorAware;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* Create by pengchao on 2018/3/7
*/
@Component("auditorAware")
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return Optional.of(authentication.getPrincipal().toString());
}
}
在Spring Boot入口类开启审计功能
package com.hfcsbc.infrastructureservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
@EnableAsync
public class PersonApplication {
public static void main(String[] args) {
SpringApplication.run(PersonApplication.class, args);
}
}
即完成配置,在使用repository
保存对象时,createdBy
CreatedDate
lastModifiedBy
lastModifiedDate
有审计功能自动插入
注:在异步方法中如何获取用户信息
由于在异步方法中使用repository保存对象,获取不到用户用户信息,需增加如下配置项,即可在Authentication获取用户的信息
package com.hfcsbc.config;
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.context.SecurityContextHolder;
/**
* Create by pengchao on 2018/3/7
*/
@Configuration
public class AuditorAwareConfig {
@Bean
public MethodInvokingFactoryBean methodInvokingFactoryBean() {
MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
methodInvokingFactoryBean.setTargetClass(SecurityContextHolder.class);
methodInvokingFactoryBean.setTargetMethod("setStrategyName");
methodInvokingFactoryBean.setArguments(new String[]{SecurityContextHolder.MODE_INHERITABLETHREADLOCAL});
return methodInvokingFactoryBean;
}
}
SecurityContextHolder的主要功能是将当前执行的进程和SecurityContext关联起来。SecurityContextHolder.MODE_INHERITABLETHREADLOCAL
:用于线程有父子关系的情景中,子线程继承父线程的SecurityContextHolder;SecurityContextHolder.MODE_INHERITABLETHREADLOCAL
:全局共用SecurityContextHolder。
源码地址:http://www.wisely.top/2018/03/08/spring-data-auditoraware/
相关推荐
基于Spring Data的AuditorAware审计功能的示例代码 Spring Data提供了AuditorAware审计功能,以记录实体的创建和修改信息。AuditorAware是一个Spring Data提供的接口,用于提供当前用户的信息,以便在实体类中记录...
5. **Auditing**:Spring Data JPA 提供了审计功能,可以自动记录实体的创建时间和修改时间。这可以通过 `@CreatedDate` 和 `@LastModifiedDate` 注解实现。 6. **Integration with Spring MVC**:Spring Data JPA ...
6. ** auditing**:Spring Data JPA还提供了审计功能,通过`@CreationTimestamp`和`@LastModifiedDate`注解,可以自动记录实体创建和修改的时间。 7. **分页和排序**:`Pageable`接口提供了分页和排序的支持,可以...
通过 Spring Data MongoDB,开发者可以利用 Spring 的强大功能轻松地进行 NoSQL 数据库的操作。 - **Spring Data MongoDB** 的设计目标是简化开发者的开发流程,通过提供一种统一的方式与不同的数据存储系统进行交互...
Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。
Spring Data MongoDB API。 Spring Data MongoDB 开发文档。
本次课程以SpringData为中心,重点讲解了其JPA组件,扩展讲解了redis,mongDB,ES组件,并且对部分组件做了必要的源码分析。而且在课程的最后部分加入了一个综合案例,可以将前面章节所学知识点应用到一个项目中,帮助...
Spring Data JPA是Spring框架的一部分,它是一种简便的数据访问层(Repository)的实现技术,主要用来简化JPA(Java Persistence API)实体数据访问代码的编写。Spring Data JPA允许开发者通过简单的接口和注解配置...
基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统 基于SpringBoot+Spring Data JPA+mybatis的...
1. 尚硅谷_SpringData_概述 2. 尚硅谷_SpringData_HelloWorld 3. 尚硅谷_SpringData_Repository接口 4. 尚硅谷_SpringData_Repository查询方法定义规范 5. 尚硅谷_SpringData_Query注解 6. 尚硅谷_SpringData_...
基于Spring Data JPA的待办事项管理系统 项目简介 本项目是一个基于Spring Data JPA框架的待办事项管理系统,旨在提供一个简单而强大的工具来管理待办事项。项目通过Spring Data JPA与数据库进行交互,支持事务...
9. 审计:Spring Data Commons支持对数据访问操作进行审计跟踪,文档介绍了基于注解和基于接口的审计元数据,以及如何配置AuditorAware来确定当前审计者信息。 附录部分包括了命名空间引用、Populators命名空间引用...
1、基于SpringBoot+Spring Data JPA+mybatis的仓库管理系统源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考...
SpringData Redis提供了对Redis内存数据存储的访问,用于缓存、消息队列等功能。关键特性有: - 提供RedisTemplate和ReactiveRedisTemplate,用于同步和响应式操作。 - 支持多种数据结构,如字符串、列表、集合、...
官网 Spring Data Neo4j API。 Spring Data Neo4j 开发文档。 Spring Data Neo4j API
Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...
5. **Redis Repositories**:Spring Data的Repository抽象层扩展到了Redis,允许开发者定义基于注解的查询方法,如`findAll()`, `findById()`, `save()`等,极大地简化了数据访问代码。 6. **事务支持**:虽然Redis...
在“HelloWorld”阶段,你将了解如何配置SpringData项目,创建Repository接口,并实现简单的数据查询功能。 SpringData的主要组件包括: 1. **SpringData JPA**:用于处理关系型数据库,如MySQL、Oracle等。它提供...
spring-data-jest, Jest的Spring Data 实现 Spring Data Jest 基于on客户端的ElasticSearch的Spring Data 实现仅在 HTTP ( 例如AWS上) 可以访问的情况下使用 Spring Data 和ElasticSearch群集。
《Spring Data实战源码》是基于Spring Data框架的一本深入解析书籍,其随书源码提供了丰富的示例和实践案例,帮助读者理解Spring Data的核心概念和技术。Spring Data是一个强大的库,旨在简化数据库访问并增强数据...