SpringBoot(9) --全局日誌切面處理並且保存請求,返回參數到數據庫

功能說明

全局日誌處理,保存請求參數和返回參數到數據庫,並且自定義註解 如下圖所示:
在這裏插入圖片描述

上代碼

首先數據庫爲:

CREATE TABLE `cl_sys_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '操作者',
  `operation` varchar(25) COLLATE utf8_bin DEFAULT NULL COMMENT '操作',
  `method` varchar(55) COLLATE utf8_bin DEFAULT NULL COMMENT '方法',
  `params` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '請求參數',
  `ip` varchar(10) COLLATE utf8_bin DEFAULT NULL COMMENT 'ip地址',
  `createdate` datetime(5) DEFAULT CURRENT_TIMESTAMP(5) ON UPDATE CURRENT_TIMESTAMP(5) COMMENT '創建時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

切面aop 代碼:

/**
 * @Classname SysLogAspect
 * @Description 日誌切面
 * @Date 2020/6/12 14:45
 * @Created by corey
 */
@Aspect
@Component
public class SysLogAspect {
    private static final Logger logger = LoggerFactory.getLogger(SpringAop.class);

    @Autowired
    private ClSysLogService sysLogService;

    //定義切點 @Pointcut
    //在註解的位置切入代碼
    @Pointcut("@annotation( com.itcorey.passw.MyLog)")
    public void logPoinCut() {
    }

    //切面 配置通知
    @AfterReturning("logPoinCut()")
    public void saveSysLog(JoinPoint joinPoint) {
        logger.info("-----------切面---------------");
        //保存日誌
        ClSysLog sysLog = new ClSysLog();

        //從切面織入點處通過反射機制獲取織入點處的方法
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        //獲取切入點所在的方法
        Method method = signature.getMethod();

        //獲取操作
        MyLog myLog = method.getAnnotation(MyLog.class);
        if (myLog != null) {
            String value = myLog.value();
            sysLog.setOperation(value);//保存獲取的操作
        }

        //獲取請求的類名
        String className = joinPoint.getTarget().getClass().getName();
        //獲取請求的方法名
        String methodName = method.getName();
        sysLog.setMethod(className + "." + methodName);
        //請求的參數
        Object[] args = joinPoint.getArgs();
        //將參數所在的數組轉換成json
        String params = Arrays.toString(args);
        String sp = "),";
        String[] split = params.split("sp",1);
        sysLog.setParams(JSON.toJSONString(split));
        //獲取用戶名
      //  sysLog.setUsername(ShiroUtils.getUserEntity().getUsername());
        //獲取用戶ip地址
        HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
        sysLog.setIp(IpUtil.getRemortIP(request));

        //調用service保存SysLog實體類到數據庫
        sysLogService.saveLog(sysLog);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章