Spring AOP操作审计功能实现

      hello,伙伴们,今天我们一起聊聊操作审计的功能实现,正常来说我们每个系统都会对用户的增删改操作做一些日志记录,防止后续一些操作的追溯或管理员对系统操作信息的管理等。那么今天我们就通过Spring的AOP特性来具体实现。

首先是要记录日志的实体类信息,如下:

public class Record {
    /**
     * 操作人
     */
    private String auditName;

    /**
     * 操作时间
     */
    private String auditTime;

    /**
     * 操作类型
     */
    private String auditType;

    /**
     * 操作表名
     */
    private String tableName;

    /**
     * 操作描述
     */
    private String desc;
    //其他需记录信息 依需求添加

}

接下来我们创建注解Audit

@Retention(RetentionPolicy.RUNTIME)
//注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在
@Target(ElementType.METHOD)//用于描述方法
public @interface Audit {
	/**
	 * 表名 
	 */
	String table() default "";
	
	/**
	 * 审计日志类型 add/delete/update等
	 */
	AuditType type() default "select";

	/**
	 * 操作说明
	 */
	String desc() default "";
}

随后创建切面AuditAspect

@Aspect//定义为切面,把当前类标识为一个切面供容器读取
@Component//创建单例对象,交给spring容器管理
public class AuditAspect {
    //注入添加日志的业务层service
    @Autowired
    private RecordService recordService;

    //定义切点 (以注解的形式做标识 所有加@Audit注解的业务方法都会执行日志记录信息
    @Pointcut("@annotation(cn.annotation.Audit)")
    public void logPointCut() {
    }

    //返回值通知 (业务方法执行完成之后 异步执行操作审计信息)
    @AfterReturning("logPointCut()")
    public void saveAuditLog(JoinPoint joinPoint){
        //获取操作审计注解
        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
        Method method = signature.getMethod();
        Audit audit = method.getAnnotation(Audit.class);
        //操作日志入库 异步执行
        logRecordService.addLogRecord(audit,joinPoint.getArgs());
    }
}

 RecordService业务层中异步执行审计日志方法如下:

 /**
     * 异步添加操作日志记录
     * @param audit
     * @param args
     */
    @Async
    public void addLogRecord(Audit audit,Object[] args){
        Record logRecord = new Record();
        if(Objects.nonNull(audit)&&!"select".equals(audit.type())){
            logRecord.setAuditTime(LocalDateTime.now().toString(STANDARD_FORMAT));
            logRecord.setAuditType(audit.type());
            logRecord.setTableName(audit.table());
            logRecord.setName(getUserName());
        }
        JSONArray jsonObject = new JSONArray(args);
        logRecord.setDesc(jsonObject.toString());
        logRecord.setId(getNextId());
        recordRepository.save(logRecord);
    }

 接下来我们在更新用户信息的接口上面加上该注解 ,修改下用户信息看看是否将操作日志信息入库:

   /**
	 * @Description: 修改用户信息   
	 *  @param: user      
	 *  @return: void      
	 */
	@Audit(type = "update",table = "user")
	public void updateUser(User user) {
		/**
        *  修改用户信息逻辑
        */
        user.setFullName("张三");
        userRepository.update(user);
	}

可以看出修改用户的日志记录已经添加到数据表中。这就是基于Spring AOP简单实现的操作审计功能,伙伴们 会用了嘛 我们下期见! 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值