java audit模块实现_Apollo 源码解析 —— Config Service 操作审计日志 Audit
> 摘要: 原创出处 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相关推荐
- 死磕 java同步系列之ReentrantReadWriteLock源码解析
问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...
- 《Java修炼指南:高频源码解析》阅读笔记一Java数据结构的实现集合类
一.Arrays工具类 来自java.util.Arrays,用来处理数组的各种方法. 1.1 List asList(T- a) 用来返回由自定数组支持的固定大小列表,虽然这里返回了一个List,但 ...
- java容器三:HashMap源码解析
前言:Map接口 map是一个存储键值对的集合,实现了Map接口的主要类有以下几种 TreeMap:用红黑树实现 HashMap:数组和链表实现 HashTable:与HashMap类似,但是线程安全 ...
- 【Java学习002】Java-ArrayList源码解析
ArrayList源码解析 1.1底层数据结构 定义:实现List接口的可扩容数组实现. 数组特点: 查询快:数组开辟的是连续空间,所以可以依靠索引进行快速查询. 增删慢:每次删除元素,都需要更改数组 ...
- Java并发编程之FutureTask源码解析
上次总结一下AQS的一些相关知识,这次总结了一下FutureTask的东西,相对于AQS来说简单好多呀 之前提到过一个LockSupport的工具类,也了解一下这个工具类的用法,这里也巩固一下吧 /* ...
- 深读源码-java同步系列之StampedLock源码解析
问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWrite ...
- 实例源码_SpringBoot数据库源码解析Template实例化操作
Jdbc TemplateAutoConfiguration 在实践过程中,除了数据源的配置外,我们还会经常用到 Jdbc Template.Jdbc Template是 Spring 对数据库的操作 ...
- Android FM模块学习之四源码解析(一)
前一章我们了解了FM手动调频,接下来我们要分析FM模块用到的源码.此源码是基于高通平台的,别的平台都大同小异,只不过是平台自己作了些小改动而已. 首先要看的当然是主activity, FMRadio. ...
- Android FM 模块学习之四 源码解析(1)
前一章我们了解了FM手动调频,接下来我们要分析FM模块用到的源码.此源码是基于高通平台的,别的平台都大同小异,只不过是平台自己作了些小改动而已. 首先要看的当然是主activity, FMRadio. ...
最新文章
- Skype for Business Server 2015-03-后端服务器-0-准备
- spring mybatis 整合jar 包冲突问题
- 事务隔离级别,看这一篇就够了
- Android笔记-对称与非对称加密及DH密钥交换
- 织梦cms响应式站长导航分类网站模板(自适应手机版)
- php中修改元素值为5,php怎么改变元素数组的值
- 与技术无关,犯错了,希望大家帮下
- 工科生快速翻译英文文献的两个软件
- C语言职工工资管理系统
- PMP资料,考过的学员整理分享
- 风尚云网学习-Linux/宝塔面板部署禅道开源系统
- oppo9s刷机教程_OPPO R9s R9sk刷机教程 OPPO R9s R9sk卡刷升级教程
- 微信公众号如何上传文档附件_公众号添加Excel、PDF、PPT等附件教程
- “共码未来”——2022Google开发者大会纪行
- python猜拳代码_猜拳代码python
- oppo的sd卡在哪里打开_oppo手机sd卡怎么打开 oppo手机sd卡怎样打开
- 为什么要用promise处理ajax,为什么要使用promise
- iMac (Retina 5K, 27-inch, Late 2015) 在内置硬盘及外置移动硬盘上安装 macOS Monterey/Windows11 22H2 双系统
- python安装jupyterlab_Jupyter/JupyterLab安装使用
- WEB自动化-(RFS)RobotFramework+Selenium框架介绍测试流程详解