在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例WEB/WAP应用开发 → 自定义切面来实现自动保存操作日志

自定义切面来实现自动保存操作日志

WEB/WAP应用开发

下载此实例
  • 开发语言:Java
  • 实例大小:0.18M
  • 下载次数:11
  • 浏览次数:72
  • 发布时间:2022-01-04
  • 实例类别:WEB/WAP应用开发
  • 发 布 人:cornyu
  • 文件格式:.rar
  • 所需积分:3

实例介绍

【实例简介】自定义切面来实现自动保存操作日志
【实例截图】from clipboard

【核心代码】


package com.yujy.logaspect.advicd; import com.alibaba.fastjson.JSON; import com.yujy.logaspect.annotation.OperateLog; import com.yujy.logaspect.test.bean.SysOperateLog; import com.yujy.logaspect.test.dao.SysOperateLogDao; import com.yujy.logaspect.vo.base.BaseRequest; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; import java.math.BigDecimal; import java.util.Date; /**  * ClassName: OperateLogAdvice <br/>  * Description: TODO <br/>  * Date:  2021/7/29 14:16<br/>  * <br/>  *  * @author cornyu  */ @Aspect @Component @Slf4j public class OperateLogAdvice { @Autowired  SysOperateLogDao logDao; @Pointcut("execution( * com.yujy..controller.*.*(..))")//两个..代表所有子目录,最后括号里的两个..代表所有参数  public void logPointCut() {
    } @Before("logPointCut()") public void doBefore(JoinPoint joinPoint) throws Throwable { //接收到请求,记录请求内容  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest(); //记录下请求内容  log.info("请求地址 : "  request.getRequestURL().toString()); log.info("HTTP METHOD : "  request.getMethod()); log.info("CLASS_METHOD : "  joinPoint.getSignature().getDeclaringTypeName() "."  joinPoint.getSignature().getName()); log.info("参数 : "  JSON.toJSONString(joinPoint.getArgs()));
    } @AfterReturning(returning = "ret", pointcut = "logPointCut()")//returning的值和doAfterReturning的参数名一致  public void doAfterReturning(Object ret) throws Throwable { //处理完请求  log.info("返回值 : "  ret);
    } @Around("logPointCut()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { long startTime = System.currentTimeMillis();
        Object ob = pjp.proceed();//ob为方法的返回值  //执行时长(毫秒)  long time = System.currentTimeMillis() - startTime; //保存 请求数据  saveLog(pjp, time); return ob;
    } private void saveLog(ProceedingJoinPoint joinPoint, long time) { try {
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            Method method = signature.getMethod(); //获取方法上的自定义注解,如果有标注 OperateLog则往下继续  OperateLog operateLogAnnotation = method.getAnnotation(OperateLog.class); if (operateLogAnnotation == null) { // 注解上的描述  return;
            } //请求的方法名  String className = joinPoint.getTarget().getClass().getName();
            String methodName = signature.getName(); //接收到请求,记录请求内容  ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            String argsStr = JSON.toJSONString(joinPoint.getArgs()[0]); //将第一个请求参数 转为jsonstr  BaseRequest baseRequest = JSON.parseObject(argsStr, BaseRequest.class); //请求的参数 保存到数据库中  SysOperateLog sysLog = new SysOperateLog();
            String logKey = operateLogAnnotation.key();
            sysLog.setCreatetime(new Date());
            sysLog.setLogkey(logKey);
            sysLog.setMethodname(methodName);
            sysLog.setUsercode(baseRequest.getUserId());
            sysLog.setRequestparam(argsStr);
            sysLog.setTime(BigDecimal.valueOf(time)); logDao.insertSelective(sysLog);
        } catch (Exception e) { log.error(e.getMessage());
            e.printStackTrace();
        }
    }

}
.
├── logaspect
│   ├── HELP.md
│   ├── logaspect.iml
│   ├── mvnw
│   ├── mvnw.cmd
│   ├── pom.xml
│   ├── src
│   │   └── main
│   │       ├── java
│   │       │   └── com
│   │       │       └── yujy
│   │       │           └── logaspect
│   │       │               ├── LogaspectApplication.java
│   │       │               ├── advicd
│   │       │               │   └── OperateLogAdvice.java
│   │       │               ├── annotation
│   │       │               │   └── OperateLog.java
│   │       │               ├── config
│   │       │               │   └── TestDataSourceConfig.java
│   │       │               ├── controller
│   │       │               │   └── TestController.java
│   │       │               ├── test
│   │       │               │   ├── bean
│   │       │               │   │   └── SysOperateLog.java
│   │       │               │   └── dao
│   │       │               │       ├── SysOperateLogDao.java
│   │       │               │       └── SysOperateLogDao.xml
│   │       │               └── vo
│   │       │                   └── BaseRequest.java
│   │       └── resources
│   │           ├── application.properties
│   │           ├── db-test-dev.properties
│   │           ├── sql
│   │           │   └── v1.sql
│   │           ├── static
│   │           └── templates
│   └── target
│       ├── classes
│       │   ├── application.properties
│       │   ├── com
│       │   │   └── yujy
│       │   │       └── logaspect
│       │   │           ├── LogaspectApplication.class
│       │   │           ├── advicd
│       │   │           │   └── OperateLogAdvice.class
│       │   │           ├── annotation
│       │   │           │   └── OperateLog.class
│       │   │           ├── config
│       │   │           │   └── TestDataSourceConfig.class
│       │   │           ├── controller
│       │   │           │   └── TestController.class
│       │   │           ├── test
│       │   │           │   ├── bean
│       │   │           │   │   └── SysOperateLog.class
│       │   │           │   └── dao
│       │   │           │       ├── SysOperateLogDao.class
│       │   │           │       └── SysOperateLogDao.xml
│       │   │           └── vo
│       │   │               └── BaseRequest.class
│       │   └── db-test-dev.properties
│       └── generated-sources
│           └── annotations
└── 好例子网_logaspect.rar

34 directories, 29 files


实例下载地址

自定义切面来实现自动保存操作日志

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警