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);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章