我使用Spring AOP实现了用户操作日志功能
今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。
需求分析
系统需要对用户的操作进行记录,方便未来溯源
首先想到的就是在每个方法中,去实现记录的逻辑,但是这样做肯定是不现实的,首先工作量大,其次违背了软件工程设计原则(开闭原则)
这种需求显然是对代码进行增强,首先想到的是使用 SpringBoot 提供的 AOP 结合注解的方式来实现
功能实现
1、 需要一张记录日志的 Log 表

导出的 sql 如下:
-- mcams.t_log definition CREATE TABLE `t_log` ( `log_id` int NOT NULL AUTO_INCREMENT COMMENT '日志编号', `user_id` int NOT NULL COMMENT '操作人id', `operation` varchar(128) NOT NULL COMMENT '用户操作', `method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '操作的方法', `params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '方法的参数', `ip` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户的ip', `create_time` timestamp NULL DEFAULT NULL COMMENT '操作时间', `cost_time` int DEFAULT NULL COMMENT '花费时间', PRIMARY KEY (`log_id`) ) ENGINE=InnoDB AUTO_INCREMENT=189 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2、我使用的是 Spring Boot 所以需要引入 spring aop 的 starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
如果是使用 spring 框架的,引入 spring-aop 即可
3、Log 实体类
package com.xiaofengstu.mcams.web.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; import lombok.Setter; /** * <p> * * </p> * * @author fengzeng * @since 20

本文介绍了如何利用Spring AOP和注解来实现用户操作日志记录的功能,避免在每个方法中添加记录逻辑。详细阐述了需求分析、功能实现步骤,包括创建Log表、引入AOP依赖、定义实体类、注解、切面类,以及如何在方法上使用注解。总结提到,AOP结合注解是优雅的代码扩展方式,并推荐了一本108页的《SpringBoot 学习笔记完整教程》。
最低0.47元/天 解锁文章
2万+





