切面的entity用来记录审计日志的内容.

切面类用来实现记录升级日志的操作.

这里还有一些辅助的类,比如枚举类,枚举出了所有的模块及名称.

这些基本工作做好了以后,在需要使用审计日志的模块中,添加类似下面这样一段语句就可以了。以导入为例,我要为导入添加审计日志。

先实例化一个审计日志AuditLog,然后执行相应的方法就可以了。我这里调用的是导入的import2DB,导入方法。由此可以推断:我在审计日志的切面类一定是定义了一个拦截import2DB方法的切入点。这里提一下。我确实定义了类似这样的拦截器,但定义的不是import2DB切入点。而是import*切入点。顾名思义,相信你能明白这是什么意思。

注意:这里拦截的所有的方法都是service层的方法。因为拦截后要传递给切面类一个叫auditLog的参数,所以这些参数都是在controller中构造好了,传递过去的。

============================================================================

主要实现如下:

1.定义一个AuditLog实体类.

============================================================================

2. 定义了一个切面类AuditLogAspect.java,仔细看看这个方法具体是实现过程。

============================================================================

下面说明一下具体的含义:

以下这些是切入点.这里定义了要对哪些文件夹下的哪些方法执行切入操作.这里对哪些方法做了监控呢?新增,修改,权限,重置密码,修改密码,置为无效,置为有效,删除,导入,导出,回收站恢复数据,删除数据。对这些方法都做进行了审计日志操作。注意一下这里的操作。这里不是调用add方法,而是add*,意思是以add开头的所有方法都会被拦截。

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..add*(..))")

public void add(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..modify*(..))")

public void modify(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..authorization*(..))")

public void authorization(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..resetPassword*(..))")

public void resetPassword(){}

//@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..modifyPwd*(..))")

//public void modifyPwd(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..enable*(..))")

public void enable(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..disable*(..))")

public void disable(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..delete*(..))")

public void delete(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..export*(..))")

public void exportFile(){}

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..import*(..))")

public void importFile() {}

/**回收站恢复数据*/

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..recovery*(..))")

public void recovery() {}

/**真实删除数据*/

@Pointcut("execution(public * com.baihui.hxtd.soa.*.service..realDelete*(..))")

public void realDelete() {}

下面来看看这个切点。这个切点的意思是拦截括号里的所有的方法,对他们进行监控。

@Pointcut("add() || modify() ||  authorization() || resetPassword() || delete() ||exportFile() || importFile() || recovery() || realDelete()")

public void anyOperation(){}

下面就是具体的通知的方法了。注释里也标明了方法的作用.

/**

* @AfterReturning("anyOperation() && args(.., auditLog)")

* 拦截anyOperation()指定的所有方法,并且这些方法的最后一个参数是auditLog

*/

@AfterReturning("anyOperation() && args(.., auditLog)")

public void doAfterReturnAudit(JoinPoint jp, AuditLog auditLog) {

logger.debug("==========进入doAfterReturnAudit=========== \n");

//自动设置记录主键编号

Object[] args = jp.getArgs();

Object arg = args[0];

if (arg != null && arg instanceof Idable) {

Idable idable = (Idable) arg;

if (idable.getId() != null) {

auditLog.setRecordId(idable.getId());

auditLog.setCreatedTime(new Date());

}

}

auditLogService.save(auditLog);

logger.debug("切入点方法doAfterReturnAudit执行完了 \n");

}

========================================================================

注: 我们在hxtd这个项目中,审计日志拦截的都是service层的add(),modify(),delete(),import(),export()等方法,对这几个方法的要求是,其最后一个参数必须是AuditLog,或者是AuditLog[].传递过来的是对象,这样直接在切面类中对该对象进行保存就可以了.

看看是如何拦截service的.因为service中的最后一个参数是从controller层传递过来的,所以,在controller层已经写好了AuditLog对象,传递到service层.

以线索为例.在修改一条数据的时候添加审计日志

/************创建一个auditLog对象,并调用构造方法,传递参数进去*****************************/

AuditLog

auditLog = new AuditLog(EnumModule.MARKETACTIVITY.getModuleName(),

activity.getId(),

activity.getName(), EnumOperationType.MODIFY.getOperationType(), user);

leadService.add(activity,

user, auditLog);

这里解释一下构造auditLog对象.

AuditLog auditLog =

new AuditLog(EnumModule.MARKETACTIVITY.getModuleName(),

activity.getId(),

activity.getName(), EnumOperationType.MODIFY.getOperationType(), user);

这个构造方法有以下几个参数,看看这个构造方法是怎么写的.

public

AuditLog(String moduleName, Long recordId, String recordName, Integer type,

User creator) {

super();

this.moduleName

= moduleName;

this.recordId

= recordId;

this.recordName

= recordName;

this.type

= type;

this.creator

= creator;

}

============================================================================

很明显,这几个参数分别是模块名称,记录id,记录名称,操作类型,操作者

这几个参数中有两个是从枚举中取得的.具体从枚举中取得好处和普通常量的区别,可以网上查查.

============================================================================

模块名称枚举类:

============================================================================

操作类型枚举:

============================================================================

下面看看我们要切入的service的写法.

在service层,没有做什么操作,就是多了一个参数.

这里是对导入记录审计日志.其他模块的凡是涉及到增删改的操作都可以实现审计日志功能,配置方法和上面也都一样

java 审计日志_审计日志的实现相关推荐

  1. python日志审计系统_综合日志审计系统

    原标题:综合日志审计系统 产品简介 中安威士综合日志审计系统(简称VS-LS),该系统 能够通过主被动结合的手段,实时不间断地采集用户网络中各种不同厂商的安全设备.网络设备.主机.操作系统.以及各种应 ...

  2. acl审计软件_审计软件有哪些-审计软件的总结分析

    国外审计软件的总结分析 1. 1 国外常见审计软件的分类 根据 J ackson 的调查审计人员常用的各类审计软件总结如下 : (1) 数据采集软件--数据采集软件是指在进行计算机辅助审计时用来采集被 ...

  3. es审计日志_审计系统的一剂良方——事件溯源

    大多数系统在数据库存的都是系统的状态数据,比如一个用户表可能会存用户的姓名.头像.个性签名等信息.如果只存状态数据的传统模式会有什么问题呢? 问题起源 假设你公司做了一个系统,并正式上线了.经过一周的 ...

  4. mysql 归档日志_归档日志管理

    数据环境: SQL select * from v$version; BANNER ---------------------------------------------------------- ...

  5. python日志审计系统_日志审计系统

    概述 随着信息化进程的深入和互联网的迅速发展,人们的工作.学习和生活方式正在发生巨大变化,效率大为提高,信息资源得到最大程度的共享.紧随信息化发展而来的网络安全问题日渐凸出,如果不能很好地解决这个问题 ...

  6. snmp获取交换机日志_日志审计系统和数据库审计系统的区别

    今天就易混淆的日志审计系统与数据库审计系统进行辨析.从日志审计系统和数据库审计系统的技术特点和原理来切入,来分析日志审计系统与数据库审计系统的异同. 01.日志审计系统 系统日志 系统日志是记录系统中 ...

  7. 通过syslog协议发送日志信息到日志审计系统(配置logback-spring.xml方式)

    目录 业务背景 实现方式 验证 业务背景 通过syslog协议将业务系统的日志信息发送到日志审计系统,日志审计系统将对日志进行存储.监控和分析,保障业务系统资源安全. 实现方式 配置logback-s ...

  8. 微服务架构 — 服务治理 — 服务监控与告警、服务日志与审计

    目录 文章目录 目录 日志与审计 监控与告警 配置中心 文档中心 日志与审计 日志分析组件应该在微服务兴起之前就被广泛使用了.即使单体应用架构,当访问数变大.或服务器规模增多时,日志文件的大小会膨胀到 ...

  9. GBase 8a 的日志管理1-备份恢复日志、重分布日志、审计日志

    备份恢复日志   备份恢复日志类型信息一览表: 日志名称 日志路径 日志说明 备份调度日志 $GLUSTER_BASE/log/gcluster/gcrcma n.log 集群内在每组的第一个节点上 ...

  10. 常见安全设备总结(IDS、IPS、上网行为管理、网闸、漏扫、日志审计、数据库审计、堡垒机等)

    常见安全设备总结(IDS.IPS.上网行为管理.网闸.漏扫.日志审计.数据库审计.堡垒机等) 一.网络结构 二.防火墙.IPS 1.防火墙 2.IPS 三.上网行为管理.网闸 1.上网行为管理 2.网 ...

最新文章

  1. Android AlarmManager 使用指南
  2. windbg+VM 设置内核调试环境(双机调试)
  3. 圈子 | 大数据分析汽车O2O的机会
  4. boost::replace_copy相关的测试程序
  5. Apache Flink Meetup,1.13 新版本发布 x 互娱场景实践分享的开发者盛筵!
  6. java学习(38):数组排序(直接排序)
  7. 安装华为鸿蒙,魅族选择与鸿蒙合作,华为这下要成了?
  8. R-CNN学习笔记5:Faster R-CNN
  9. unix环境高级编程(第三版)-读书笔记1
  10. 超级好用的一个php上传图片类(随机名_缩略图_加水印),php教程_超级好用的一个php上传图片类(随机名,缩略图,加水印)...
  11. 基于java的百货中心供应链管理系统
  12. goland 注释模板_【精品】金工实习心得体会模板合集5篇
  13. Win11修改用户名(超详细图文)
  14. Level Shift
  15. 斐讯M1,nodered打包显示在homekit
  16. 初秋进补 粥汤大对决
  17. HEXOFontmin
  18. 两台电脑如何直接用一根网线传数据(终极篇)
  19. 论“正义”——什么是正义?
  20. JavaScript练习--[使用js语言实现网页切换图片的效果]

热门文章

  1. 同构数怎么判断_判断同构数C语言
  2. 英特尔驱动程序下载_如何修复英特尔计算机上的“此计算机未验证正在安装的驱动程序”...
  3. ArcGIS导出shape地图边界点数据
  4. python win32 替换效率低_python win32.api pyhook ShellExecute 编写自用windows系统快捷键工具,提升工作效率,提升编码效率...
  5. 关于固态硬盘开卡转接卡的研究,用SM2258XT测试智微、祥硕、威盛
  6. python 狄里克雷平滑_狄里克雷平滑(Dirichlet)、線性插值平滑(Linear Interpolated)、拉普拉斯平滑(Laplacian)...
  7. 计算机算法专业英语,计算机算法相关术语的英语词汇
  8. 基于51单片机的酒精检测仪设计
  9. 键盘常用ASCII码对照表
  10. [b][size=5]沸点文库下载器V2.5.0.0——百度文库豆丁道客巴巴实时浏览下载热门排行文档推荐[/size][/b] [b]沸点文库下载器 - 沸点文档下载 软件信息 软件版本:V2.5.