Spring AOP *** 作审计功能实现

Spring AOP *** 作审计功能实现,第1张

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 "";
	
	
	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业务层中异步执行审计日志方法如下:

 
    @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);
    }

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

   
	@Audit(type = "update",table = "user")
	public void updateUser(User user) {
		
        user.setFullName("张三");
        userRepository.update(user);
	}

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存