怎么用Spring AOP实现记录操作日志
导读:本文共2120.5字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:接下来,请跟着小编一起来学习吧!1 添加maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>2 自定义操作日志注解@Target... ...
目录
(为您整理了一些要点),点击可以直达。接下来,请跟着小编一起来学习吧!
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 测试
通过postman发送请求,如下图表示记录操作日志成功
操作日志表的sql语句如下
CREATETABLE若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!sys_operate_log
(id
bigint(20)NOTNULLAUTO_INCREMENT,user_name
varchar(30)CHARACTERSETutf8mb4COLLATEutf8mb4_binNULLDEFAULTNULLCOMMENT'操作者用户名',operate_module
varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_binNULLDEFAULTNULLCOMMENT'操作模块',operate_type
int(1)NULLDEFAULTNULLCOMMENT'操作类型(1:查询2:插入3:更改4:删除)',operate_time
datetimeNULLDEFAULTNULLCOMMENT'操作时间',
PRIMARYKEY(id
)USINGBTREE
)ENGINE=InnoDBAUTO_INCREMENT=3CHARACTERSET=utf8mb4COLLATE=utf8mb4_binCOMMENT='操作日志表'ROW_FORMAT=Dynamic;
怎么用Spring AOP实现记录操作日志的详细内容,希望对您有所帮助,信息来源于网络。