> 摘要: 原创出处 http://www.iocoder.cn/Apollo/config-service-audit/ 「芋道源码」欢迎转载,保留摘要,谢谢!

1. 概述

本文分享 Config Service 操作审计日志 Audit 。在每次在做 ConfigDB 写操作( 增、删、改 )操作时,都会记录一条 Audit 日志,用于未来的审计追溯。

老艿艿:这种实践方式,非常适用于我们做的管理平台。

2. Audit

com.ctrip.framework.apollo.biz.entity.Audit ,继承 BaseEntity 抽象类,Audit 实体。代码如下:

@Entity

@Table(name = "Audit")

@SQLDelete(sql = "Update Audit set isDeleted = 1 where id = ?")

@Where(clause = "isDeleted = 0")

public class Audit extends BaseEntity {

/**

* 操作枚举

*/

public enum OP {

INSERT, UPDATE, DELETE

}

/**

* 实体名

*/

@Column(name = "EntityName", nullable = false)

private String entityName;

/**

* 实体编号

*/

@Column(name = "EntityId")

private Long entityId;

/**

* 操作名

*/

@Column(name = "OpName", nullable = false)

private String opName;

/**

* 备注

*/

@Column(name = "Comment")

private String comment;

}

entityName + entityId 字段,确实一个实体对象。

opName 字段,操作名。分成 INSERT、UPDATE、DELETE 三种,在 OP 中枚举。

comment 字段,备注。

例如:

老艿艿:在管理平台中,我比较喜欢再增加几个字段

ip 字段,请求方的 IP 。

ua 字段,请求的 User-Agent 。

extras 字段,数据结果为 Map 进行 JSON 化,存储重要字段。例如,更新用户手机号,那么会存储 mobile=15601691024 到 extras 字段中。

3. AuditService

在 apollo-biz 项目中,com.ctrip.framework.apollo.biz.service.AuditService ,提供 Aduit 的 Service 逻辑给 Admin Service 和 Config Service 。

@Service

public class AuditService {

@Autowired

private AuditRepository auditRepository;

List findByOwner(String owner) {

return auditRepository.findByOwner(owner);

}

List find(String owner, String entity, String op) {

return auditRepository.findAudits(owner, entity, op);

}

@Transactional

void audit(String entityName, Long entityId, Audit.OP op, String owner) {

Audit audit = new Audit();

audit.setEntityName(entityName);

audit.setEntityId(entityId);

audit.setOpName(op.name());

audit.setDataChangeCreatedBy(owner);

auditRepository.save(audit);

}

@Transactional

void audit(Audit audit) {

auditRepository.save(audit);

}

}

4. AuditRepository

com.ctrip.framework.apollo.biz.repository.AuditRepository ,继承 org.springframework.data.repository.PagingAndSortingRepository 接口,提供 Audit 的数据访问 给 Admin Service 和 Config Service 。代码如下:

public interface AuditRepository extends PagingAndSortingRepository {

@Query("SELECT a from Audit a WHERE a.dataChangeCreatedBy = :owner")

List findByOwner(@Param("owner") String owner);

@Query("SELECT a from Audit a WHERE a.dataChangeCreatedBy = :owner AND a.entityName =:entity AND a.opName = :op")

List findAudits(@Param("owner") String owner, @Param("entity") String entity, @Param("op") String op);

}

666. 彩蛋

水更一小篇,美滋滋。

java audit模块实现_Apollo 源码解析 —— Config Service 操作审计日志 Audit相关推荐

  1. 死磕 java同步系列之ReentrantReadWriteLock源码解析

    问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...

  2. 《Java修炼指南:高频源码解析》阅读笔记一Java数据结构的实现集合类

    一.Arrays工具类 来自java.util.Arrays,用来处理数组的各种方法. 1.1 List asList(T- a) 用来返回由自定数组支持的固定大小列表,虽然这里返回了一个List,但 ...

  3. java容器三:HashMap源码解析

    前言:Map接口 map是一个存储键值对的集合,实现了Map接口的主要类有以下几种 TreeMap:用红黑树实现 HashMap:数组和链表实现 HashTable:与HashMap类似,但是线程安全 ...

  4. 【Java学习002】Java-ArrayList源码解析

    ArrayList源码解析 1.1底层数据结构 定义:实现List接口的可扩容数组实现. 数组特点: 查询快:数组开辟的是连续空间,所以可以依靠索引进行快速查询. 增删慢:每次删除元素,都需要更改数组 ...

  5. Java并发编程之FutureTask源码解析

    上次总结一下AQS的一些相关知识,这次总结了一下FutureTask的东西,相对于AQS来说简单好多呀 之前提到过一个LockSupport的工具类,也了解一下这个工具类的用法,这里也巩固一下吧 /* ...

  6. 深读源码-java同步系列之StampedLock源码解析

    问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWrite ...

  7. 实例源码_SpringBoot数据库源码解析Template实例化操作

    Jdbc TemplateAutoConfiguration 在实践过程中,除了数据源的配置外,我们还会经常用到 Jdbc Template.Jdbc Template是 Spring 对数据库的操作 ...

  8. Android FM模块学习之四源码解析(一)

    前一章我们了解了FM手动调频,接下来我们要分析FM模块用到的源码.此源码是基于高通平台的,别的平台都大同小异,只不过是平台自己作了些小改动而已. 首先要看的当然是主activity, FMRadio. ...

  9. Android FM 模块学习之四 源码解析(1)

    前一章我们了解了FM手动调频,接下来我们要分析FM模块用到的源码.此源码是基于高通平台的,别的平台都大同小异,只不过是平台自己作了些小改动而已. 首先要看的当然是主activity, FMRadio. ...

最新文章

  1. Skype for Business Server 2015-03-后端服务器-0-准备
  2. spring mybatis 整合jar 包冲突问题
  3. 事务隔离级别,看这一篇就够了
  4. Android笔记-对称与非对称加密及DH密钥交换
  5. 织梦cms响应式站长导航分类网站模板(自适应手机版)
  6. php中修改元素值为5,php怎么改变元素数组的值
  7. 与技术无关,犯错了,希望大家帮下
  8. 工科生快速翻译英文文献的两个软件
  9. C语言职工工资管理系统
  10. PMP资料,考过的学员整理分享
  11. 风尚云网学习-Linux/宝塔面板部署禅道开源系统
  12. oppo9s刷机教程_OPPO R9s R9sk刷机教程 OPPO R9s R9sk卡刷升级教程
  13. 微信公众号如何上传文档附件_公众号添加Excel、PDF、PPT等附件教程
  14. “共码未来”——2022Google开发者大会纪行
  15. python猜拳代码_猜拳代码python
  16. oppo的sd卡在哪里打开_oppo手机sd卡怎么打开 oppo手机sd卡怎样打开
  17. 为什么要用promise处理ajax,为什么要使用promise
  18. iMac (Retina 5K, 27-inch, Late 2015) 在内置硬盘及外置移动硬盘上安装 macOS Monterey/Windows11 22H2 双系统
  19. python安装jupyterlab_Jupyter/JupyterLab安装使用
  20. WEB自动化-(RFS)RobotFramework+Selenium框架介绍测试流程详解

热门文章

  1. 雷军 26 年前写的代码,你见过吗?
  2. 2020,你还相信微服务?
  3. android gridview不显示 自定义,Android gridview和自定义标题
  4. C#机房重构-总结(二)
  5. python 平滑曲线
  6. python strip
  7. 实时人脸关键点源码推荐
  8. c++ socket框架
  9. android 找不到符号 符号 RequiresApi
  10. oracle创建数据库 表空间 用户