利用SpringDataJPA开启审计功能,自动保存操作人操作时间

利用SpringDataJPA开启审计功能可以方便地对每次数据操作进行记录,包括操作人、操作时间等信息。这样做有利于数据追溯和安全性控制。下面是实现该功能的步骤:

  1. 添加必要的依赖

在项目的pom.xml文件中添加以下依赖:

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

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 创建审计类

创建一个名为AuditConfig的类,并把它设置为Spring组件,该类实现了Spring Data JPA提供的JpaAuditingHandler接口。JpaAuditingHandler会在实体保存到数据库时使用Spring Security提供的Authentication获取当前用户信息,然后将其设置到实体对应的审计字段中。

@Configuration
@EnableJpaAuditing
public class AuditConfig implements AuditorAware<String>, JpaAuditingHandler {
    @Override
    public Optional<String> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if (authentication == null || !authentication.isAuthenticated()) {
            return Optional.of("system");
        }

        return Optional.of(authentication.getName());
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        super.setBeanFactory(beanFactory);
    }
}

其中,getCurrentAuditor()方法用来获取当前用户信息,如果获取不到就返回"system",该方法返回值会由JpaAuditingHandler设置到实体的审计字段中。

  1. 创建实体类

在数据实体类中添加审计字段,如createdBy、createdAt、lastModifiedBy、lastModifiedDate。

@Entity
@EntityListeners(AuditingEntityListener.class)
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;

    private Double price;

    @CreatedBy
    private String createdBy;

    @CreatedDate
    private Date createdAt;

    @LastModifiedBy
    private String lastModifiedBy;

    @LastModifiedDate
    private Date lastModifiedDate;
}
  1. 集成配置

在应用程序启动入口处添加@EnableJpaAuditing注释,以启用审计功能。

@SpringBootApplication
@EnableJpaAuditing
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
 }
  1. 测试

测试时,在JPA Repository中添加实体数据,可以看到自动添加了当前用户信息以及时间戳。

@Service
@Transactional
public class ProductService {
    @Autowired
    private ProductRepository productRepository;

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public Iterable<Product> findAll() {
        return productRepository.findAll();
    }
}

完整示例代码请见:https://github.com/zhancongc/spring-data-jpa-auditing-demo

例如,执行以下代码进行测试:

@Service
public class Demo {
    @Autowired
    private ProductService productService;

    public void execute() {
        Product product = new Product();
        product.setName("iPhone 13");
        product.setPrice(9999.0);

        productService.saveProduct(product);

        Iterable<Product> products = productService.findAll();

        for (Product p : products) {
            System.out.println(p.toString());
        }
    }
}

结果如下:

Product{id=1, name='iPhone 11', price=999.9, createdBy='system', createdAt=Tue Nov 09 10:30:45 CST 2021, lastModifiedBy='system', lastModifiedDate=Tue Nov 09 10:30:45 CST 2021}
Product{id=2, name='iPhone 12', price=1999.9, createdBy='system', createdAt=Tue Nov 09 10:31:18 CST 2021, lastModifiedBy='system', lastModifiedDate=Tue Nov 09 10:31:18 CST 2021}
Product{id=3, name='iPhone 13', price=9999.0, createdBy='system', createdAt=Tue Nov 09 10:31:46 CST 2021, lastModifiedBy='system', lastModifiedDate=Tue Nov 09 10:31:46 CST 2021}

以上就是利用SpringDataJPA开启审计功能、自动保存操作人操作时间的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用SpringDataJPA开启审计功能,自动保存操作人操作时间 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 关于spring boot使用 jdbc+mysql 连接的问题

    请看下面的攻略: 1.引入相关依赖 在pom.xml文件中加入以下依赖: <dependencies> <!– Spring Boot JDBC 依赖 –> <dependency> <groupId>org.springframework.boot</groupId> <artifact…

    Java 2023年5月20日
    00
  • eclipse修改jvm参数调优方法(2种)

    以下是关于“eclipse修改jvm参数调优方法(2种)”的完整攻略: 1. 修改Eclipse默认JVM参数 打开Eclipse。 在Eclipse菜单栏上选择Window > Preferences 。 在弹出的对话框中,选中Java > Installed JREs。 选中你想要修改JVM参数的JRE并点击Edit按钮。 在弹出的对话框中,…

    Java 2023年5月26日
    00
  • java的Hibernate框架报错“UnknownProfileException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“UnknownProfileException”错误。这个错误通常是由于以下原因之一引起的: 未知的配置文件:如果您的配置文件未知,则可能会出现此错误。在这种情况下,需要检查您的配置文件以解决此问题。 配置文件中的拼写错误:如果您的配置文件中存在拼写错误,则可能会出现此错误。在这种情况下,需要检查您的配置…

    Java 2023年5月4日
    00
  • 使用 Apache 反向代理的设置技巧

    使用 Apache 反向代理可以帮助我们有效地实现多个应用之间的无缝集成和流量控制。在下面的攻略中,我们将介绍使用 Apache 反向代理的设置技巧,帮助您更好地应用于实际项目中。 原理简介 反向代理是指代理服务器接收客户端请求后,将请求转发给内部服务器,并将内部服务器返回的响应结果返回给客户端。在反向代理的过程中,客户端无需直接连接内部服务器,这样可以实现…

    Java 2023年5月19日
    00
  • 详解Java如何获取文件编码格式

    下面是详解Java如何获取文件编码格式的完整攻略。 什么是文件编码格式? 文件编码格式是指用于存储或传输文本数据的编码方式,常见的编码方式有UTF-8、GBK、GB2312等。因为不同的编码方式会使用不同的字符集将文本编码为二进制数据,所以在读取文本文件时需要了解文件的编码方式,才能正确地将二进制数据转换为文本数据。 Java如何获取文件编码格式 第一种方法…

    Java 2023年5月19日
    00
  • java编程的30个建议

    “Java编程的30个建议”攻略 简介 “Java编程的30个建议”是一本由石凡等人撰写的关于Java编程的指南书籍。该书籍通过30个不同的示例,介绍了Java编程中的一些基本原则和技巧。本攻略将会对该书籍的内容进行详细解读和说明。 建议1:理解Java堆栈模型 Java堆栈模型是整个Java程序的基础架构。程序中的所有变量、对象都被保存在堆和栈中。灵活的使…

    Java 2023年5月30日
    00
  • 在Spring Boot中加载初始化数据的实现

    在Spring Boot中加载初始化数据的实现有很多种方法,下面给出两种示例来介绍具体实现过程: 示例一:使用命令行来加载初始化数据 创建Spring Boot项目 首先,我们需要创建一个Spring Boot项目。可以使用IDE或者Maven命令行等方式来创建。 编写初始化数据 在src/main/resources目录下创建一个data.sql文件,文件…

    Java 2023年5月20日
    00
  • echarts整合多个类似option的方法实例

    下面我将为您详细讲解“echarts整合多个类似option的方法实例”的完整攻略,主要分为以下几步进行。 1. 确认需求 在开始实现之前,我们首先需要确认我们的需求是什么。假设我们需要实现一个折线图,我们希望可以通过选择不同的时间段,动态的显示不同的数据,例如按天、按周、按月等显示数据。 2. 构建数据 为了实现我们的需求,我们需要构建一个数据对象,来保存…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部