Spring AOP實(shí)現(xiàn)記錄操作日志
本文實(shí)例為大家分享了Spring AOP實(shí)現(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í)行前");
? ? ? ? //從切面織入點(diǎn)處通過(guò)反射機(jī)制獲取織入點(diǎn)處的方法
? ? ? ? MethodSignature signature = (MethodSignature) joinPoint.getSignature();
? ? ? ? Method method = signature.getMethod();
? ? ? ? logger.info(method.toString());
? ? ? ? //執(zhí)行方法
? ? ? ? Object obj = joinPoint.proceed();
? ? ? ? OperationLog operationLog = method.getAnnotation(OperationLog.class);
? ? ? ? //通過(guò)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 測(cè)試

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

操作日志表的sql語(yǔ)句如下
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 '操作時(shí)間', ? PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '操作日志表' ROW_FORMAT = Dynamic;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用maven指定依賴包的版本(解決示例)
我們?cè)谑褂肁依賴的時(shí)候,這個(gè)依賴有引入了第三方B依賴,這時(shí)候我想指定B依賴的版本號(hào),下面?zhèn)€大家分享解決示例,對(duì)SpringBoot maven依賴包相關(guān)配置方法感興趣的朋友一起看看吧2024-04-04
idea?Maven?插件?docker-maven-plugin?打包docker鏡像上傳到遠(yuǎn)程倉(cāng)庫(kù)的過(guò)程詳解
這篇文章主要介紹了idea Maven插件docker-maven-plugin打包docker鏡像上傳到遠(yuǎn)程倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
Spring實(shí)現(xiàn)一個(gè)簡(jiǎn)單的SpringIOC容器
本篇文章主要介紹了Spring實(shí)現(xiàn)一個(gè)簡(jiǎn)單的SpringIOC容器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
詳解MyBatis批量插入數(shù)據(jù)Mapper配置文件的寫(xiě)法
本篇文章主要介紹了詳解MyBatis批量插入數(shù)據(jù)Mapper文件的寫(xiě)法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
IntelliJ IDEA將導(dǎo)入的項(xiàng)目轉(zhuǎn)成maven項(xiàng)目
這篇文章主要介紹了IntelliJ IDEA將導(dǎo)入的項(xiàng)目轉(zhuǎn)成maven項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java用split分割含一個(gè)或多個(gè)空格的字符串案例
這篇文章主要介紹了Java用split分割含一個(gè)或多個(gè)空格的字符串案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)過(guò)來(lái)看看吧2020-09-09

