怎么用Spring AOP实现记录操作日志(aop,spring,开发技术)

时间:2024-04-28 00:12:24 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

接下来,请跟着小编一起来学习吧!

1 添加maven依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2 自定义操作日志注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public@interfaceOperationLog{
//操作类型
inttype()defaultGlobalConstant.OPERATE_TYPE_QUERY;

//操作模块
Stringmodule()default"";
}

3 定义切面类

importcom.admin.annotation.OperationLog;
importcom.admin.sys.dao.SysOperateLogDao;
importcom.admin.sys.dao.SysUserDao;
importcom.admin.sys.entity.SysOperateLog;
importcom.admin.util.JwtUtil;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.Around;
importorg.aspectj.lang.annotation.Aspect;
importorg.aspectj.lang.annotation.Pointcut;
importorg.aspectj.lang.reflect.MethodSignature;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.stereotype.Component;

importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletRequest;
importjava.lang.reflect.Method;

@Aspect
@Component
publicclassOperationLogAspect{
@Resource
privateHttpServletRequestrequest;

@Resource
privateSysUserDaosysUserDao;

@Resource
privateSysOperateLogDaosysOperateLogDao;

privateLoggerlogger=LoggerFactory.getLogger(getClass());

@Pointcut("@annotation(com.admin.annotation.OperationLog)")
publicvoidpointCut(){
}

@Around("pointCut()")
publicObjectaround(ProceedingJoinPointjoinPoint)throwsThrowable{
logger.info("方法执行前");
//从切面织入点处通过反射机制获取织入点处的方法
MethodSignaturesignature=(MethodSignature)joinPoint.getSignature();
Methodmethod=signature.getMethod();
logger.info(method.toString());
//执行方法
Objectobj=joinPoint.proceed();
OperationLogoperationLog=method.getAnnotation(OperationLog.class);
//通过token获取用户ID
LonguserId=JwtUtil.getUserIdByToken(request);
StringuserName=this.sysUserDao.selectById(userId).getUserName();
StringoperateModule=operationLog.module();
intoperateType=operationLog.type();
SysOperateLogsysOperateLog=SysOperateLog.builder()
.userName(userName)
.operateModule(operateModule)
.operateType(operateType)
.build();
//记录操作日志
this.sysOperateLogDao.insert(sysOperateLog);
logger.info("方法执行后");
returnobj;
}
}

4 测试

怎么用Spring AOP实现记录操作日志

通过postman发送请求,如下图表示记录操作日志成功

怎么用Spring AOP实现记录操作日志

操作日志表的sql语句如下

CREATETABLEsys_operate_log(
idbigint(20)NOTNULLAUTO_INCREMENT,
user_namevarchar(30)CHARACTERSETutf8mb4COLLATEutf8mb4_binNULLDEFAULTNULLCOMMENT'操作者用户名',
operate_modulevarchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_binNULLDEFAULTNULLCOMMENT'操作模块',
operate_typeint(1)NULLDEFAULTNULLCOMMENT'操作类型(1:查询2:插入3:更改4:删除)',
operate_timedatetimeNULLDEFAULTNULLCOMMENT'操作时间',
PRIMARYKEY(id)USINGBTREE
)ENGINE=InnoDBAUTO_INCREMENT=3CHARACTERSET=utf8mb4COLLATE=utf8mb4_binCOMMENT='操作日志表'ROW_FORMAT=Dynamic;
若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

本文:怎么用Spring AOP实现记录操作日志的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何使用Java判定一个数值是否在指定的开闭区间范围内下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18