欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring AOP實(shí)現(xiàn)記錄操作日志

 更新時間:2022年09月02日 11:27:41   作者:dreaming9420  
這篇文章主要為大家詳細(xì)介紹了Spring AOP實(shí)現(xiàn)記錄操作日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(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)處通過反射機(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);
? ? ? ? //通過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)文章

  • Java與Scala創(chuàng)建List與Map的實(shí)現(xiàn)方式

    Java與Scala創(chuàng)建List與Map的實(shí)現(xiàn)方式

    這篇文章主要介紹了Java與Scala創(chuàng)建List與Map的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot實(shí)現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    SpringBoot實(shí)現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    項(xiàng)目開發(fā)中經(jīng)常會遇到多數(shù)據(jù)源同時使用的場景,比如冷熱數(shù)據(jù)的查詢等情況,所以接下來本文就來介紹一下如何使用實(shí)現(xiàn)自定義注解的形式來實(shí)現(xiàn)動態(tài)數(shù)據(jù)源切換吧
    2023-12-12
  • java比較兩個list是否相同equals的代碼詳解

    java比較兩個list是否相同equals的代碼詳解

    在本篇文章里小編給大家分享的是關(guān)于java比較兩個list是否相同equals的代碼詳解,有需要的朋友們可以參考學(xué)習(xí)下。
    2020-02-02
  • 一文搞懂String的intern()方法

    一文搞懂String的intern()方法

    這篇文章主要給大家介紹String的intern()方法,文中有詳細(xì)的代碼示例,感興趣的小伙伴讓我們一起來看看這究竟是個什么玩意
    2023-06-06
  • 解讀Spring?Bean的作用域

    解讀Spring?Bean的作用域

    這篇文章主要介紹了解讀Spring?Bean的作用域,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java Map.get()返回指定鍵所映射的值

    Java Map.get()返回指定鍵所映射的值

    這篇文章主要介紹了Java Map.get()返回指定鍵所映射的值,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實(shí)例

    Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實(shí)例

    這篇文章主要介紹了Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實(shí)例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java page cache回寫機(jī)制案例詳解

    Java page cache回寫機(jī)制案例詳解

    這篇文章主要介紹了Java page cache回寫機(jī)制案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java String創(chuàng)建對象實(shí)例解析

    Java String創(chuàng)建對象實(shí)例解析

    這篇文章主要介紹了Java String創(chuàng)建對象實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 深入Spring Boot實(shí)現(xiàn)對Fat Jar jsp的支持

    深入Spring Boot實(shí)現(xiàn)對Fat Jar jsp的支持

    這篇文章主要介紹了深入Spring Boot實(shí)現(xiàn)對Fat Jar jsp的支持,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論