首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

使用 @Audited 增强Spring Boot 应用程序的数据审计能力

编程知识
2024年07月25日 09:27

介绍

在Spring Boot开发的动态世界中,确保数据完整性和跟踪变化是至关重要的。实现这一目标的一个强大工具是@Audited注解。本文深入探讨了该注解的复杂性、其目的、实现步骤以及如何利用其功能进行有效的实体审计。

理解@Audited

Spring Boot中的@Audited注解用于审计实体,提供对数据随时间变化的详细记录。这在需要跟踪修改、用户操作或合规要求的情况下非常有价值。

实现步骤

1. 依赖项:要包含@Audited,需要在项目中添加spring-data-envers依赖。确保你的pom.xml或build.gradle反映这一添加。

<!-- Maven Dependency -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-envers</artifactId>
</dependency>

spring-boot-starter-data-jpa依赖包含了使用Spring Data JPA进行数据访问所需的组件。然而,如果你特别想在Spring Boot中使用@Audited注解启用实体审计,还需要包含hibernate-envers依赖。该依赖添加了对Hibernate Envers的支持,这是负责实体版本控制和审计的工具。

2. 实体配置:将@Audited注解应用于你想要审计的实体类。

import org.hibernate.envers.Audited;
@Entity
@Audited
public class YourEntity {
  // 你的实体字段和方法
}

3. application.yml配置:确保你的application.yml或application.properties包含Hibernate Envers所需的配置。

spring:
   data:
      jpa:
        repositories:
            enabled: true
        auditing:
            enabled: true

4. 审计表字段:Hibernate Envers生成的审计表通常包括REV(修订号)、REVTYPE(修订类型)、AUDIT_TIMESTAMP(审计时间戳)等字段。这些字段共同存储对审计实体的历史更改。

Spring Boot会自动创建审计表(例如,‘YourEntity_AUD’)以存储元数据。

探索审计表中的字段:
– REV:修订号(递增)
– REVTYPE:修订类型(插入、更新、删除)
– AUDITEDFIELD:审计字段值
– MODIFIEDBY:进行更改的用户
– MODIFIEDDATE:修改日期和时间

5. 检索审计数据:使用Spring Data JPA仓库查询审计历史。

import org.springframework.data.repository.history.RevisionRepository;
import org.springframework.data.history.Revision;
import java.util.List;
public interface YourEntityAuditRepository extends RevisionRepository<YourEntity, Long, Integer> {
    List<Revision<Integer, YourEntity>> findRevisionsById(Long entityId);
}

在这个例子中:
– YourEntityAuditRepository扩展了RevisionRepository,这是一个处理修订的Spring Data JPA接口。
– findRevisionsById方法允许你检索具有指定ID的实体的所有修订。

然后,你可以在服务或控制器中使用此仓库查询审计历史:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AuditService {
    
    private final YourEntityAuditRepository entityAuditRepository;
    @Autowired
    public AuditService(YourEntityAuditRepository entityAuditRepository) {
        this.entityAuditRepository = entityAuditRepository;
    }
    public List<Revision<Integer, YourEntity>> getEntityRevisions(Long entityId) {
        return entityAuditRepository.findRevisionsById(entityId);
    }
}

另一个例子

使用Hibernate Envers查询具有给定ID的特定实体的审计历史

List<YourEntity_AUD> revisions = auditReader.findRevisions(YourEntity.class, entityld);

– auditReader:一个AuditReader实例,由Hibernate Envers提供。它允许你与实体的审计历史进行交互。
– findRevisions:Hibernate Envers提供的方法,用于检索具有指定ID的给定实体的所有修订。
– YourEntity.class:你想要检索审计历史的实体类。
– entityId:你想要获取修订的实体的特定ID。
– List<YourEntity_AUD>:结果是一个审计实体(YourEntity_AUD)的列表,列表中的每个条目代表实体的一个修订。

在Hibernate Envers中,当你为一个实体启用审计时,它会生成一个带有“_AUD”后缀的相应审计实体(默认情况下)。这个审计实体会跟踪原始实体随时间变化的所有更改。

因此,这行代码本质上是在查询具有给定ID的实体的所有修订的审计历史,并将结果存储在一个审计实体列表中。然后,可以使用此列表分析或显示实体在不同修订中的更改。

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

From:https://www.cnblogs.com/didispace/p/18322448
本文地址: http://www.shuzixingkong.net/article/405
0评论
提交 加载更多评论
其他文章 .NET 轻量级 命令行工具 CSharpRepl
前言 当我们需要快速测试代码片段时,常见的做法是启动Visual Studio或使用在线代码编辑器。然而,Visual Studio的启动可能较为缓慢且占用较多系统资源,而在线编辑器则可能遇到语法支持局限或网络延迟问题。 为解决这个问题,给大家推荐一款轻量级的本地C#执行工具——CSharpRepl
.NET 轻量级 命令行工具 CSharpRepl .NET 轻量级 命令行工具 CSharpRepl .NET 轻量级 命令行工具 CSharpRepl
学了十几种编程语言后,我终于悟了!
我为什么要学这么多编程语言?是怎么学习的?学了这么多语言对我有哪些好处和坏处?现在我们到底应不应该学多门语言呢?
学了十几种编程语言后,我终于悟了! 学了十几种编程语言后,我终于悟了! 学了十几种编程语言后,我终于悟了!
elasticdump数据迁移与内外网安装
elasticdump数据迁移与内外网安装 一、安装node 首先获取安装包 wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz tar axf node-v16.14.0-linux-x64.tar.xz -C
PHP转Go系列 | 推荐一个强大的Go语言工具函数库
从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数。
PHP转Go系列 | 推荐一个强大的Go语言工具函数库 PHP转Go系列 | 推荐一个强大的Go语言工具函数库
Django+Bootstrip 卡片模板设计 经典精品
下面是一个完整的卡片模板代码,包含所有元素,并使用Django的模板语言来处理状态字段的条件渲染。同时还包括示例视图和URL配置。 完整的卡片模板 &lt;div class=&quot;card&quot;&gt; &lt;!-- 卡片图片 --&gt; &lt;img src=&quot;{{
Django+Bootstrip 卡片模板设计 经典精品
Elasticjob执行job幂等
ElasticJob的幂等机制,是指作业分片执行的幂等,他需要做到以下两点: 同一个分片在当前作业实例上不会被重复执行 一个作业分片不能同时在多个作业实例上执行 如何实现幂等 场景模拟:存在任务A执行周期为10s一次。正常情况下任务处理耗时3-5s。但是某一时刻因为数据量突然增大或者因为数据库压力,
常回家看看之largebin_attack
常回家看看之largebin_attack 先简单介绍一下什么是largebin largebin 是 glibc 的 malloc 实现中用于管理大块内存的一种数据结构。在 glibc 的内存分配中,largebin 是 bin 系列的一部分,用于存储大小超过某个阈值的空闲内存块。largebin
常回家看看之largebin_attack 常回家看看之largebin_attack 常回家看看之largebin_attack
胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐 Agent是以大模型为核心的智能体,通过与用户对话的形式,来完成各种任务,它很像一个“人”。如果和人做类比,它应该具备以下能力: Agent的各个要素各个子模块: 1.对话式Agent 1.1 月之暗面(Moonsho
胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐 胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐 胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐