Spring AOP實現(xiàn)記錄操作日志
本文實例為大家分享了Spring AOP實現(xiàn)記錄操作日志的具體代碼,供大家參考,具體內(nèi)容如下
1 添加maven依賴
<dependency> ? ? ? <groupId>org.springframework.boot</groupId> ? ? ? <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2 自定義操作日志注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OperationLog {
? ? //操作類型
? ? int type() default GlobalConstant.OPERATE_TYPE_QUERY;
? ? //操作模塊
? ? String module() default "";
}3 定義切面類
import com.admin.annotation.OperationLog;
import com.admin.sys.dao.SysOperateLogDao;
import com.admin.sys.dao.SysUserDao;
import com.admin.sys.entity.SysOperateLog;
import com.admin.util.JwtUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
@Aspect
@Component
public class OperationLogAspect {
? ? @Resource
? ? private HttpServletRequest request;
? ? @Resource
? ? private SysUserDao sysUserDao;
? ? @Resource
? ? private SysOperateLogDao sysOperateLogDao;
? ? private Logger logger = LoggerFactory.getLogger(getClass());
? ? @Pointcut("@annotation(com.admin.annotation.OperationLog)")
? ? public void pointCut() {
? ? }
? ? @Around("pointCut()")
? ? public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
? ? ? ? logger.info("方法執(zhí)行前");
? ? ? ? //從切面織入點處通過反射機制獲取織入點處的方法
? ? ? ? MethodSignature signature = (MethodSignature) joinPoint.getSignature();
? ? ? ? Method method = signature.getMethod();
? ? ? ? logger.info(method.toString());
? ? ? ? //執(zhí)行方法
? ? ? ? Object obj = joinPoint.proceed();
? ? ? ? OperationLog operationLog = method.getAnnotation(OperationLog.class);
? ? ? ? //通過token獲取用戶ID
? ? ? ? Long userId = JwtUtil.getUserIdByToken(request);
? ? ? ? String userName = this.sysUserDao.selectById(userId).getUserName();
? ? ? ? String operateModule = operationLog.module();
? ? ? ? int operateType = operationLog.type();
? ? ? ? SysOperateLog sysOperateLog = SysOperateLog.builder()
? ? ? ? ? ? ? ? .userName(userName)
? ? ? ? ? ? ? ? .operateModule(operateModule)
? ? ? ? ? ? ? ? .operateType(operateType)
? ? ? ? ? ? ? ? .build();
? ? ? ? //記錄操作日志
? ? ? ? this.sysOperateLogDao.insert(sysOperateLog);
? ? ? ? logger.info("方法執(zhí)行后");
? ? ? ? return obj;
? ? }
}4 測試

通過postman發(fā)送請求,如下圖表示記錄操作日志成功

操作日志表的sql語句如下
CREATE TABLE `sys_operate_log` ?( ? `id` bigint(20) NOT NULL AUTO_INCREMENT, ? `user_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '操作者用戶名', ? `operate_module` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '操作模塊', ? `operate_type` int(1) NULL DEFAULT NULL COMMENT '操作類型(1:查詢 ?2:插入 ?3:更改 ?4:刪除)', ? `operate_time` datetime NULL DEFAULT NULL COMMENT '操作時間', ? PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '操作日志表' ROW_FORMAT = Dynamic;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用maven指定依賴包的版本(解決示例)
我們在使用A依賴的時候,這個依賴有引入了第三方B依賴,這時候我想指定B依賴的版本號,下面?zhèn)€大家分享解決示例,對SpringBoot maven依賴包相關(guān)配置方法感興趣的朋友一起看看吧2024-04-04
idea?Maven?插件?docker-maven-plugin?打包docker鏡像上傳到遠(yuǎn)程倉庫的過程詳解
這篇文章主要介紹了idea Maven插件docker-maven-plugin打包docker鏡像上傳到遠(yuǎn)程倉庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05
Spring實現(xiàn)一個簡單的SpringIOC容器
本篇文章主要介紹了Spring實現(xiàn)一個簡單的SpringIOC容器,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04
詳解MyBatis批量插入數(shù)據(jù)Mapper配置文件的寫法
本篇文章主要介紹了詳解MyBatis批量插入數(shù)據(jù)Mapper文件的寫法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04
IntelliJ IDEA將導(dǎo)入的項目轉(zhuǎn)成maven項目
這篇文章主要介紹了IntelliJ IDEA將導(dǎo)入的項目轉(zhuǎn)成maven項目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

