Java审计对比工具JaVers使用

        最近有个需求,需要将页面的内容生成excel或者word文档,而且每次的修改都需要生成新的版本,同时需要记录每次修改变化的内容。我们会把每次的修改的内容提交赋值给一个java对象,同时存储到数据库一条新数据,对应数据表一行数据记录。有个功能需要每次对比两个任意版本的数据,前端传递两个不同的版本号参数和其他对应的文档id参数,然后后端对应查出来这两行数据,一种方法是,将两条数据,转换成json字符串返回给前端,前端去对比两个字符串的不同的地方,然后高亮对比展示在页面。其实也可以后端去作对比,将变化的内容和两条数据一起返回,这样前端你可以直接按照后端返回的对比内容,去高亮显示两次修改的不同。

           现在模拟这种情况,比如是修改一个user的数据,第一次创建时候是1.0.0版本,然后又再次修改了一些字段的内容,提交后,形成一条新纪录,版本1.0.1版本,现在直接创建两个user对象,就当是从数据库中根据一定条件加上版本号限制查出来的两条数据。

         JaVers的官网:https://javers.org/

         首先,引入需要的基础Maven依赖:

<!-- 阿里JSON解析器 -->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.43</version>
        </dependency>

       <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>31.1-jre</version>
        </dependency>

然后写个测试方法,模拟这种场景

import com.alibaba.fastjson2.JSONArray;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.core.diff.Change;
import org.javers.core.diff.Diff;

import java.util.List;

/**
 * @author xiaomifeng1010
 * @version 1.0
 * @date: 2024-10-24 17:04
 * @Description
 */
public class DiffCompareTest {

    public static void main(String[] args) {
//        模拟从数据库中查出来了两条数据
        User user1 = new User();
        user1.setName("张三");
        user1.setAge(18);
        user1.setAddress("北京");
        user1.setPhone("123456789");
        user1.setEmail("123456789@qq.com");
        user1.setPassword("123456789");
        user1.setVersion("1.0.0");
        User user2 = new User();
        user2.setName("李四");
        user2.setAge(18);
        user2.setAddress("广州");
        user2.setPhone("123456789");
        user2.setEmail("123456789@qq.com");
        user2.setPassword("dfjdgdg");
        user2.setVersion("1.0.1");

        Javers javers = JaversBuilder.javers().build();
        Diff diff = javers.compare(user1, user2);

        System.out.println("对比:"+diff);

        List<Change> changes = diff.getChanges();
        System.out.println("变化:"+changes);

//        转换成json数组字符串
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("[");
        for (Change change : changes) {
            String valueChange = change.toString().replace("ValueChange", "");
            stringBuilder.append(valueChange);
            System.out.println("每一项的变化:"+change);
        }
        stringBuilder.append("]");
        String jsonArrayStr = stringBuilder.toString();
//        打印转换之后的json数组字符串
        System.out.println("json数组:"+jsonArrayStr);
//        或者赋值给一个java对象
        if (StringUtils.isNotBlank(jsonArrayStr)) {
            JSONArray jsonArray = JSONArray.parseArray(jsonArrayStr);
            List<DiffChange> diffChanges = jsonArray.toJavaList(DiffChange.class);
            System.out.println("转换后的对象:"+diffChanges);
        }

    }
}

@Data
class User {
    private String name;
    private Integer age;
    private String address;
    private String phone;
    private String email;
    private String password;
    private String version;


}

@Data
class DiffChange{
    private String property;
    private String left;
    private String right;
}

 在实际项目中,数据中是从数据中查询出来的,同时也是通过controller中的接口返回给前端的json数据,根据情况,组合java对象,返回给前端就可以了。

这个示例的运行输出内容如下:

非常好用,而且这个javers开源框架还有对应的各种数据库的审计工具;可以在Maven中央仓库中找到:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/904875.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱:连接实体与关系的语义网络

知识图谱作为人工智能领域的核心技术之一&#xff0c;是一种通过三元组&#xff08;实体关系属性&#xff09;形式&#xff0c;结构化表达实体间关系的语义网络。这种网络不仅嵌入了丰富的语义和逻辑&#xff0c;还遵循一定的规则&#xff0c;使其成为人类进行推理、预测和分类…

免费PDF页面提取小工具

下载地址 https://download.csdn.net/download/woshichenpi/89922797 使用说明&#xff1a;PDF页面提取工具 1. 启动应用程序 双击程序的启动图标或者通过命令行运行程序。 2. 选择PDF文件 在应用程序窗口中找到“选择PDF”按钮并点击它。在弹出的文件选择对话框中&#x…

法律智能助手:开源NLP系统助力法律文件高效审查与检索

一、系统概述 思通数科AI平台是一款融合了自然语言处理和多标签分类技术的开源智能文档分类工具&#xff0c;特别适用于法律行业。平台采用深度学习的BERT模型来进行特征提取与关系抽取&#xff0c;实现了精准的文档分类和检索。用户可以在线训练和标注数据&#xff0c;使系统…

-XSS-

链接 https://github.com/do0dl3/xss-labs 搭建过程非常容易的 搭建好之后&#xff0c;就可以点击图片开始闯关了 第一关--JS弹窗函数alert() 显示payload的长度是4 level1.php?nametest level1.php?nametest1 发现只要改变name的值就显示什么在页面上 没有什么过滤的 …

Python | Leetcode Python题解之第522题最长特殊序列II

题目&#xff1a; 题解&#xff1a; class Solution:def findLUSlength(self, strs: List[str]) -> int:def is_subseq(s: str, t: str) -> bool:pt_s pt_t 0while pt_s < len(s) and pt_t < len(t):if s[pt_s] t[pt_t]:pt_s 1pt_t 1return pt_s len(s)ans …

VBto Converter是一款功能强大的工具,可让您快速轻松地将Microsoft Visual Basic 6.0项目转换

VBto Converter是一款功能强大的工具&#xff0c;可让您快速轻松地将Microsoft Visual Basic 6.0项目转换 1、简介2、官方网站3、本站下载&#xff08;已汉化&#xff09; 1、简介 VBto Converter V2.90 版本&#xff0c;是一款功能强大的工具&#xff0c;可让您快速轻松地将M…

勒索软件通过易受攻击的 Cyber​​Panel 实例攻击网络托管服务器

一个威胁行为者&#xff08;或可能多个&#xff09;使用 PSAUX 和其他勒索软件攻击了大约 22,000 个易受攻击的 Cyber​​Panel 实例以及运行该实例的服务器上的加密文件。 PSAUX 赎金记录&#xff08;来源&#xff1a;LeakIX&#xff09; Cyber​​Panel 漏洞 Cyber​​Pane…

创新业态下金融头部机构在 FICC 平台建设上的思考与实践

近年来&#xff0c;FICC 投资交易呈现活跃多元态势&#xff0c;创新转型稳步推进。FICC 平台电子化方兴未艾&#xff0c;是机构提升服务效率和质量的一大着力点。因此&#xff0c;在 FICC 平台建设上&#xff0c;许多机构都进行了深入研究&#xff0c;积累了丰富的实践经验。 …

RedisIO多路复用

一、多路复用要解决的问题: 并发多客户端连接&#xff0c;在多路复用之前的处理方案是同步阻塞网络IO模型&#xff0c;这种模型的特点就是用一个进程来处理一个网络连接。优点在于比较简单&#xff0c;缺点在于性能较差&#xff0c;每个用户请求到来都得占用一个进程来处理&am…

XML解析小坑记录[正则表达式解析]

一、问题描述 在做 SSO 单点登录时( 认证中为CAS服务对接 )。在完成对用户ticket票根校验后&#xff0c;返回了用户信息有关 XML 数据片段&#xff0c;例如下&#xff1a; <cas:serviceResponse xmlns:cas"http://www.xxx.xx/xx/cas"><cas:authentication…

人工智能与伦理:我们应该如何平衡科技与人性?

内容概要 在这个瞬息万变的时代&#xff0c;人工智能的迅猛发展让我们面对前所未有的伦理困境。科技进步带来了便利&#xff0c;但同时也亟需我们反思如何对待人性。尤其是在实现算法透明性时&#xff0c;我们要确保每一个决策背后都能被理解与追溯&#xff0c;这不仅是对技术…

electron展示下载进度条

我们使用electron下载文件时&#xff0c;会发现不像浏览器一样会有地方展示下载进度&#xff0c;这导致下载一些大文件时不知道下载进度到哪里了 下面我们通过electron提供的will-download监听和element-plus中的ElNotification和ElProgress组件实现这一功能 实现逻辑 触发…

【算法】(Python)回溯算法

回溯算法&#xff1a; 回溯算法是一种算法思想。采用“深度优先搜索&#xff08;dfs&#xff0c;depth first search&#xff09;”。采用“尝试”和“回溯”的策略。尝试搜索所有可能的解决方案&#xff0c;遇到不满足条件的撤销选择、回退到回溯点&#xff08;满足回溯条件的…

音视频入门基础:FLV专题(18)——Audio Tag简介

一、引言 根据《video_file_format_spec_v10_1.pdf》第75页&#xff0c;如果某个Tag的Tag header中的TagType值为8&#xff0c;表示该Tag为Audio Tag&#xff1a; 这时StreamID之后紧接着的就是AudioTagHeader&#xff0c;也就是说这时Tag header之后的就是AudioTagHeader&…

探索Python终端美化的终极利器:Rich库

文章目录 &#x1f680; 探索Python终端美化的终极利器&#xff1a;Rich库第一部分&#xff1a;背景介绍第二部分&#xff1a;Rich库是什么&#xff1f;第三部分&#xff1a;如何安装Rich库&#xff1f;第四部分&#xff1a;Rich库的简单函数使用方法第五部分&#xff1a;结合场…

【Java笔记】1-JDK/JRE/JVM是个啥?

JDK、JRE、JVM可以说是入门必须了解的三个词汇 先说全称 JDK&#xff1a;Java Development Kit&#xff0c;Java开发工具包 JRE&#xff1a;Java Runtime Environment&#xff0c;Java运行环境 JVM&#xff1a;Java Virtual Machine&#xff0c;Java虚拟机 再说关系 JVM⊆J…

视觉目标检测标注xml格式文件解析可视化 - python 实现

视觉目标检测任务&#xff0c;通常用 labelimage标注&#xff0c;对应的标注文件为xml。 该示例来源于开源项目&#xff1a;https://gitcode.com/DataBall/DataBall-detections-100s/overview 读取 xml 标注文件&#xff0c;并进行可视化示例如下&#xff1a; #-*-coding:ut…

金和OA-C6 ApproveRemindSetExec.aspx XXE漏洞复现(CNVD-2024-40568)

0x01 产品描述&#xff1a; 金和C6协同管理平台是以"精确管理思想"为灵魂&#xff0c;围绕“企业协同四层次理论”模型&#xff0c;并紧紧抓住现代企业管理的六个核心要素&#xff1a;文化 Culture、 沟通Communication 、 协作Collaboration 、创新 Creation、 控制…

ETL集成工具丨如何运用ETLCloud单步调试断点功能

在现代数据处理领域&#xff0c;ETLCloud 的单步调试断点功能正成为数据管理的重要工具。ETLCloud 是一个强大的云端数据处理平台&#xff0c;它提供了灵活的单步调试功能&#xff0c;使得用户能够逐步跟踪和分析数据处理流程。本文将探讨如何运用 ETLCloud 的单步调试断点功能…

GB/T 28046.2-2019 道路车辆 电气及电子设备的环境条件和试验 第2部分:电气负荷(3)

写在前面 本系列文章主要讲解道路车辆电气及电子设备的环境条件和试验GB/T 28046标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解GB/T 28046标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 第2部分&#xff1a;电气负荷 4.9 抛负载…