跟着JHipster学做项目 (4)审计功能

javers:JaVers-Java的对象审核和差异框架 </ s> </ s> </ s> </ s> 什么是JaVers JaVers是用于审核数据更改的轻量级Java库。 我们都使用版本控制系统作为源代码,那么为什么不使用专门的框架来提供Java对象(实体,POJO,数据对象)的审核跟踪呢? 查看我们的网站 您可以在找到有关JaVers项目的最新信息。 查看我们的页面。 构建并测试JaVers 克隆我们的github仓库 git clone https://github.com/javers/javers.git cd javers 编译JaVers并运行单元测试 ./gradlew build 运行环境自检,以检查JaVers是否与您的JDK版本兼容 ./gradlew javers-core:run 问题与贡献 我们很乐意为您提供问题和贡献! 您可以报告错误或功能请求。 应该在提问。 我们会回答他们。 在创建问题之前,请阅读我们 立即下载

JHipster的基础应用里实现了对用户登录的审计功能,该功能可以控制用户密码输入错误次数。此外,通过扩展模块实现了实体审计功能。

实体的审计功能分两个方面:

  1. 在对实体进行创建或者修改时,自动添加用户和更改日期等信息。
  2. 在对实体进行创建或者修改时,系统自动记录每次更改的内容,相当于对实体实现版本记录功能。

下面来分别看一下JHipster的具体实现方式。

用户登录审计功能:

创建自定义repository来实现AuditEventRepository,如下所示:

@Repository
public class CustomAuditEventRepository implements AuditEventRepository {

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void add(AuditEvent event) {
        if (!AUTHORIZATION_FAILURE.equals(event.getType()) &&
            !Constants.ANONYMOUS_USER.equals(event.getPrincipal())) {

            PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent();
            persistentAuditEvent.setPrincipal(event.getPrincipal());
            persistentAuditEvent.setAuditEventType(event.getType());
            persistentAuditEvent.setAuditEventDate(event.getTimestamp());
            Map<String, String> eventData = auditEventConverter.convertDataToStrings(event.getData());
            persistentAuditEvent.setData(truncate(eventData));
            persistenceAuditEventRepository.save(persistentAuditEvent);
        }
    }
}

当用户登录成功或失败后,系统会记录如下信息:

登录信息

 

实体审计功能(一)添加用户和日期信息

可以分为三步走,第一步添加类实现AuditorAware,用以获取用户信息,如下:

@Component
public class SpringSecurityAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        return Optional.of(SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT));
    }
}

第二步创建抽象类,利用@CreatedBy等注解让spring boot自动添加用户和日期等信息,如下:

public abstract class AbstractAuditingEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @CreatedBy
    @Field("created_by")
    @JsonIgnore
    @DiffIgnore
    private String createdBy;

    @CreatedDate
    @Field("created_date")
    @JsonIgnore
    @DiffIgnore
    private Instant createdDate = Instant.now();

    @LastModifiedBy
    @Field("last_modified_by")
    @JsonIgnore
    @DiffIgnore
    private String lastModifiedBy;

    @LastModifiedDate
    @Field("last_modified_date")
    @JsonIgnore
    @DiffIgnore
    private Instant lastModifiedDate = Instant.now();

}

第三步使实体类继承上面创建的抽象类。

@Document(collection = "author")
public class Author extends AbstractAuditingEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String id;

    @Field("name")
    private String name;

    @Field("birth_date")
    private LocalDate birthDate;

}

完成以上动作,在数据库中的记录如下:

author

实体审计功能(二)实体的版本记录

该功能的实现,可以提供实体的被改变的信息记录,更改前的值,何时何人更改。JHipster主要通过依赖JaVers来实现,具体操作如下。

首先,在pom.xml中引入依赖

        <dependency>
            <groupId>org.javers</groupId>
            <artifactId>javers-spring-boot-starter-mongo</artifactId>
            <version>5.8.8</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.4.2</version>
        </dependency>

其次创建类来实现AuthorProvider,提供操作用户信息。

@Component
public class JaversAuthorProvider implements AuthorProvider {

   @Override
   public String provide() {
       return SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT);
   }
}

最后在需要进行版本控制的实体对应repository添加注解@JaversSpringDataAuditable

import com.mycompany.myapp.domain.Author;
import org.javers.spring.annotation.JaversSpringDataAuditable;

import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

/**
 * Spring Data MongoDB repository for the Author entity.
 */
@SuppressWarnings("unused")
@Repository
@JaversSpringDataAuditable
public interface AuthorRepository extends MongoRepository<Author, String> {
}

完成以上配置后,每当创建一个新的实体或修改实体,系统会自动记录所有过程,数据库记录如下图所示:

sanpshot

JHipster的Audit Log页面如下图所示:

entity

Good Luck,

Cheers!

STM32N6:MCU+NPU架构如何重塑边缘AI部署新范式 STM32N6作为业界首款MCU+NPU架构的通用微控制器,通过集成600 GOPS算力的NPU与800MHz Cortex-M55内核,实现了边缘AI部署的革命性突破。该方案在工业视觉和智能家居等场景中,以超低功耗和成本提供实时AI处理能力,性能较传统MCU提升超100倍,重塑了边缘智能设备的设计范式。 阅读详情

相关推荐

Linux双网卡设置IP属于同一网段的ping方法以及现象记录分析

文章目录前言ping以及MAC地址总结 前言 写在前面:经常遇到客户将板卡上的两个网络设备的IP地址设置为同一网段的情况,比如eth0:192.168.0.232,eth1:192.168.0.30. 我的解释是,不能设置为同一网段,或者使用其中一个时候下线另外一个网卡。但是我不知道这个说法到底是根据什么,查了很多资料也没找到明确的说法,但是下面这个实验能够说明一些现象的原因。 ping以及MAC地址 首先查看网卡的信息 ifconfig 因为两个网卡都在同一个网段,所以如果这个时候直接和我们的主机(I

“逛丢一只鞋”的博客 1万+

JaVers:自动化数据审计

在开发应用程序时,我们经常需要存储有关数据如何随时间变化的信息。此信息可用于更轻松地调试应用程序并满足设计要求。在本文中,我们将讨论 JaVers 工具,该工具允许您通过记录数据库实体状态的更改来自动执行此过程。Javers如何工作?库的操作基于以 JSON 格式在专用表中存储有关业务数据实体的信息。JaVers允许您将这些信息存储在等数据库中。使用另一方面,如果您决定使用其中一个为了提供适当的算法来比较不同版本的对象,JaVers 对几种数据类型进行操作:实体、和。

allway2的博客 3040

UDS诊断ISO14229新手入门篇

这个命令的格式稍微复杂一点。sub-function = 0x06 用于读取某个 DTC 及其相关的环境数据,此时 parameter 为 4 个 byte,前三个 byte 用于标识我们要读取的 DTC,第四个 byte 用于标识要读取的环境数据的范围,UDS 规定使用 FF 来表示读取所有的环境数据,各厂家可以要根据自己的需求定义其他的值来代表要读取的环境数据的范围。环境数据包括 DTC 状态,优先级,发生次数,老化计数器,时间戳,里程等,厂家还可以根据自己的需求定义一些此 DTC 产生时的测量数据。

weixin_45387165的博客 1973

DDD中Diff的应用(JAVERS)的封装

文章目录背景说明官网构造diff测试测试修改测试新增集合比较封装CRUD自定义比较器使用注解类级别@Entity@ValueObject@Value@DiffIgnore@ShallowReference@IgnoreDeclaredProperties@TypeName属性@Id@DiffIgnore@DiffInclude@ShallowReference@PropertyName 背景 在一些应用程序开发中,我们往往只能获取到当前对象的值,而无法获取到之前对象的值,以及当前对象的值那些值是修改的。如果

念念不忘,必有回响 6061

Linux CentOS 8系统离线升级内核版本

CentOS 8操作系统离线场景下升级内核版本

WQwinter的博客 3237

Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)

本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。

data3的博客 935

java 轻量级对象审计工具-JaVers

Javers是一个Java对象审计和差异比较框架,能高效比较对象状态变化并生成变更记录。它支持递归比较对象图、集合差异分析,提供快照存储和审计历史查询功能。通过Maven引入依赖后,可快速实现对象比对(如javers.compare())和变更记录(如diff.prettyPrint())。高级特性包括字段忽略、自定义比较器和SpringBoot集成,适用于配置比对、审计日志等场景。相比同类工具,Javers更专注于对象关系与审计能力,适合需要版本管理和变更追踪的系统。

IT从业者 1458

R语言vegan包实战:用varpart函数搞定生态学VPA分析(附完整代码与数据集)

本文详细介绍了如何使用R语言vegan包中的varpart函数进行生态学方差分解分析(VPA),包括数据准备、模型构建、结果解读和可视化呈现。通过完整的代码示例和数据集,帮助研究者理解不同环境因子对生物群落变化的相对贡献,并掌握显著性检验等高级技巧。

weixin_42525005的博客 447

JaVers

javers可以方便的记录数据变更的时间和操作人员信息但是数据记录在javers指定的表格中,表格无法进行额外的定制化而且javers只能记录通过Repository进行数据变更记录,当前项目中使用的JpaQueryFactory变更的记录javers无法识别网上关于javers的使用用例也比较少所以javers用在某一个服务中记录某些特定数据的变更还是比较方便的但是整合出一个服务出来记录所有数据的变更可能不是很好用行额外的定制化。

weixin_45222658的博客 1237

UE5 Niagara基础知识讲解

在UE5版本中,Niagara粒子系统引入了许多可添加的模块,分别用于控制发射器的生成和更新、粒子的生成和更新以及渲染效果。本文采用虚幻5.2.1版本,以图文方式对Niagara基础知识进行讲解。

一碗清深的博客 2468

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5802

阿敦软件技术框架-跟着JHipster学做项目专栏

跟着JHipster学做项目(1)- MockMvc用法技巧 跟着JHipster学做项目(2) - 使用Swagger2生成API文档 (上)生成swagger的asciidoc文件 跟着JHipster学做项目(3) - Maven的使用技巧(上)分离jar和依赖 跟着JHipster学做项目(3) - Maven的使用技巧(下)去掉因lifecycle引起的红叉 跟着JHipster学做项目 (4)审计功能 跟着JHipster学做项目 (5) 异常处理(上)Spring Boot后端 跟

java_augur的专栏 4540

基于Python的京东商品价格监控与降价提醒系统设计与实现

本文详细介绍了如何使用Python构建一个完整的京东商品价格监控与降价提醒系统。系统通过爬虫技术实时抓取京东商品价格信息,结合数据存储与分析,实现价格波动监控和智能降价提醒功能。文章涵盖了系统设计、技术选型、代码实现以及部署方案,为电子商务价格监控领域提供了一个实用的解决方案。关键词:Python爬虫、京东API、价格监控、降价提醒、自动化。

2201_76125261的博客 404

推荐一款强大的Java对象审计库——JaVers

在软件开发的世界中,数据的版本控制至关重要。我们对于源代码的管理有着严格的标准和工具,但你是否考虑过对Java对象进行类似的审计跟踪呢?JaVers,一个轻量级的Java库,就是为了满足这个需求而诞生的。 ## 项目介绍 JaVers提供了一个专业的框架,用于追踪你的Java对象(包括实体、POJO和数据对象)的变化,就像我们在代码版本控制中的做法一样。它旨在为业务数据创建一种审计记录,帮助你...

gitblog_00003的博客 1250

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

如何优雅地记录操作日志:使用Spring Data JPA和Javers篇

Javers是一个Java库,用于跟踪和比较对象的变化。它提供了简单而强大的API,可以与Spring Data JPA无缝集成,轻松实现审计日志功能。Javers支持领域模型的版本控制和变更历史查询,非常适合用于审计日志记录。项目设置首先,我们需要创建一个Spring Boot项目,并引入所需的依赖。

granzy7973588的专栏 2447

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JaVers:Java对象审计与差异分析框架

JaVers是一个轻量级的Java库,专门用于审计和分析Java对象的变化。该项目的主要编程语言是Java,同时也使用了Groovy进行部分开发。JaVers旨在为Java开发者提供一个简单而强大的工具,用于跟踪和记录数据对象的变化历史。 #### 2. 项目的核心功能 JaVers的核心功能包括: - **对象审计**:记录和跟踪Java对象的变化历史,包括创建、更新和删除操作。 - **差异...

gitblog_01264的博客 691

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java数据审计工具:Envers and JaVers比较

在Java世界中,有两种数据审计工具:Envers和JaVers。 Envers已经存在了很长时间,它被认为是主流。 JaVers提供全新的方法和技术独立性。 如果您考虑哪种工具更适合您的项目,本文是一个很好的起点。本文分为三个部分。首先,是高层次的比较。 在第二部分中,我将展示用于管理组织结构的简单演示应用程序 Javers和Envers进行的数据审计。 在第三部分中,我将检查这两种工具如何应对对审计数据的查询。目录JaVers和Envers之间有两个很大的区别:Envers是Hibernate插件。 它

allway2的博客 3157

JaVers:让Java对象“穿越“时间的时光机,回溯历史变更的终极指南

JaVers是一个开源的Java对象变更追踪库,它能够自动记录和查询Java对象的状态变化。通过为对象添加@DomainObject注解,JaVers可以追踪对象及其嵌套属性的完整变更历史,支持按ID、属性或时间点查询变更记录。与Git记录文件变更不同,JaVers专注于对象内部状态的追踪,为数据审计和问题排查提供了便利。该工具提供简单的API(如javers.commit()记录变更)和丰富的查询功能,并能与Spring Boot轻松集成。通过配置数据库存储,JaVers可实现持久化记录,让开发者随时回溯

墨夶的博客 1684

JaVers 教程:一个对象审计和差异框架

JaVers 是一款轻量级的 Java 库,用于审计你的数据对象的变化。它类似源代码管理系统,但是专注于跟踪应用程序中 Java 对象的变更。JaVers 提供了对象之间的比较功能,还支持将审计日志存入数据库以备后续审计。 官网:[javers.org](http://javers.org) ## 2. 项目快速启动 ### 安装依赖 在 Maven 工程中,添加 JaVers 的依赖到 ...

gitblog_00460的博客 970

Java审计对比工具JaVers使用

强大的Java数据审计对比工具JaVers的使用,用于数据对比或者版本控制场景

小蜜蜂1010的博客 2555

Javers 比较两个类的差异

Javers 在开发过程中遇到需求,比较数据库中的原数据与新修改要写入库中的数据。这个实体类是比较复杂的。例如有基本类型,BigDecimal类型,自定义类型,Date类型,List集合,Set集合,Map集合等。在比较复杂的类的情况下,使用Objects的equals是不适用的。所以为了解决这个问题,可以使用Javers库中的compare方法来解决该问题 引入 <!-- https://mvnrepository.com/artifact/org.javers/javers-core --&gt

weixin_45518313的博客 1571

JaVers完全指南:Java对象审计与差异追踪的终极解决方案

JaVers是一款轻量级Java库,专为**对象审计**和**差异追踪**设计,就像源代码的版本控制系统一样,为你的Java对象提供完整的变更历史记录。无论是实体类、POJO还是数据对象,JaVers都能轻松记录它们的每一次修改,让数据变更可追溯、可审计。 ## 为什么选择JaVers? 在日常开发中,我们经常需要跟踪数据的变化——谁修改了数据?修改了哪些字段?修改前后的值是什么?JaVers

gitblog_01042的博客 791

【转载】Javers 比较两个类的差异

Javers 比较两个类的差异

CBeann的博客 391

【亲测免费】 JaVers框架安装与使用教程

JaVers项目的基本目录结构如下: ``` . ├── README.md # 项目简介文档 ├── LICENSE # 开源许可文件 ├── gradle # Gradle构建相关文件夹 │ └── settings.gradle # 构建配置 └── src # 源代码目录 ├── mai...

gitblog_00462的博客 844

JaVers 常见问题解决方案

JaVers 是一个轻量级的 Java 库,专门用于审计数据变化。它可以帮助开发者跟踪和记录 Java 对象(如实体、POJO、数据对象)的变化历史。JaVers 提供了强大的对象差异比较功能,适用于需要版本控制和审计功能的应用场景。 ## 主要编程语言 JaVers 主要使用 Java 编程语言开发。 ## 新手使用注意事项及解决方案 ### 1. 依赖注入问题 **问题描述**:新手...

gitblog_00045的博客 772

JaVers高级用法:自定义类型适配器与复杂对象比较技巧

JaVers是一个强大的Java对象审计和差异比较框架,它能够帮助开发者轻松跟踪对象的变更历史并比较复杂对象之间的差异。本文将深入探讨JaVers的高级用法,重点介绍如何创建自定义类型适配器以及掌握复杂对象比较的实用技巧,让你在项目中充分发挥JaVers的潜力。 ## 自定义类型适配器:让JaVers支持更多数据类型 在实际项目中,我们经常会遇到各种特殊的数据类型,JaVers虽然内置了对许多

gitblog_00066的博客 1845
上一篇: 跟着JHipster学做项目(3) - Maven的使用技巧(下)去掉因lifecycle引起的红叉
下一篇: 跟着JHipster学做项目 (5) 异常处理(上)Spring Boot后端
java_augur
博客等级 码龄22年 67粉丝 64原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值