使用 @Audited 增强Spring Boot 应用程序的数据审计能力
介绍
在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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
使用 @Audited 增强Spring Boot 应用程序的数据审计能力的更多相关文章
- 使用Maven插件构建Spring Boot应用程序镜像
使用Maven插件构建Spring Boot应用程序的Docker镜像. 环境准备 1.Linux系统 2.安装JDK,Maven 3.安装Docker 应用实践 1.在应用程序根目录下添加Docke ...
- docker 部署Spring Boot:Docker化Spring Boot应用程序
第一章 1.创建项目存放目录 mkdir /root/sproot -p 2.准备好Spring Boot应用程序 jar 包 testrest.jar 第二章 1. 安装docker 在所有节点执行 ...
- SpringBoot之二:部署Spring Boot应用程序方式
衡量多种部署方式 Spring Boot应用程序有多种构建和运行方式,其中一些你已经使用过了. 在IDE中运行应用程序(涉及Spring ToolSuite或IntelliJ IDEA). 使用Mav ...
- Spring Boot入门程序-STS
使用Eclipse EE 中的 Spring Tool插件,完成 第一个Spring Boot应用程序的创建. 一.安装Spirng Tool插件 在 Eclipse EE Oxygen版本,安装“S ...
- Spring Boot入门程序
创建第一个Spring Boot的入门程序. 带你一步一步的,搭建第一个Spring Boot 的入门程序,并成功运行,通过实践过程,初步认识和了解如何使用Spring Boot 创建应用程序. 一. ...
- 将Spring Boot应用程序迁移到Java9:兼容性
将 Spring Boot 应用程序迁移到 Java 9:兼容性 随着 Java 9 的到来,关于如何迁移应用程序以使用模块系统有很多的讨论.遗憾的是,大多数文章的焦点都集中于简单的 Hello Wo ...
- 如何为Spring Boot应用程序配置端口
[转]https://www.javaroad.cn/questions/11162 1 个月前 1.1通过属性文件更新 . /src/main/resources/application.prope ...
- 阿里P7级教你如何在Spring Boot应用程序中使用Redis
在Spring Boot应用程序中使用Redis缓存的步骤: 1.要获得Redis连接,我们可以使用Lettuce或Jedis客户端库,Spring Boot 2.0启动程序spring-boot-s ...
- 峰哥说技术:02-第一个Spring Boot应用程序
Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017 ...
- 将Spring Boot应用程序注册成为系统服务
文章目录 前期准备 打包成可执行jar包 注册成为liunx服务 System V Init Systemd Upstart 在Windows中安装 Windows Service Wrapper J ...
随机推荐
- Django——基于forms组件和ajax的注册功能
path('register/',views.register) #注册的form表单 from django import forms from django.forms import widget ...
- Wpf UI框架 MaterialDesign 的使用记录
近期公司有桌面客户端的开发需求,并且对样式和界面反馈有一定的要求,对比各种开源UI框架后确认使用MaterialDesign . 1.引入框架MaterialDesignThemes,注意下对应的版本 ...
- Pyomo基础学习笔记:建模组成要素的编写方法
1.Pyomo 简介 pyomo文档[数学建模]优化模型建模语言 Pyomo 入门教程 - 知乎 (zhihu.com) Pyomo 是基于 Python 的开源软件包,主要功能是建立数学规划模型,包 ...
- MySQL学习笔记-多表查询(上)
多表查询(上) 一. 多表关系 在实际应用中,根据需求,设计的表结构之间存在联系,联系一般分为以下三种 一对多(多对一) 多对多 一对一 1. 一对多(多对一) 案例:部门与员工的关系,一个部门对应多 ...
- itest(爱测试) 紧急 BUG 修复版(4.5.6)发布,,开源BUG 跟踪管理 & 敏捷测试管理&极简项目管理软件
itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...
- k8s网络问题以及容器跨宿主机通信原理
[0]资源配置文件 [root@mcwk8s03 mcwtest]# ls mcwdeploy.yaml [root@mcwk8s03 mcwtest]# cat mcwdeploy.yaml api ...
- 混入 - Mixins
混入(mixins)是一种分发Vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 混入分为:全局和局部 定义全局混 ...
- 你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
首先,将问题提交到缺陷管理库里面进行备案. 然后,要获取判断的依据和标准: 根据需求说明书.产品说明.设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据: 如果没有文档依据, ...
- 什么是spring框架?
spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,是一个分层的javaEE一站式轻量级开源框架
- 高级前端开发需要知道的 25 个 JavaScript 单行代码
1. 不使用临时变量来交换变量的值 例如我们想要将 a 于 b 的值交换 let a = 1, b = 2; // 交换值 [a, b] = [b, a]; // 结果: a = 2, b = 1 这 ...