栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring AOP操作审计功能实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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简单实现的操作审计功能,伙伴们 会用了嘛 我们下期见! 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/680586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号