欢迎来到传世资源网!
加载中...
正在加载,请耐心等待...
本站为收藏、学习站,如有侵权,请联系管理员删除!

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

介绍 评论 失效链接反馈

自定义切面来实现自动保存操作日志
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.rar34 directories, 29 files

下载声明:

本站资源均有第三方用户自行上传分享推荐,非本站自制,仅供玩家做交流学习之用!切勿用于商业用途!游戏作品版权归原作者享有,如有版权问题,请附带版权证明至邮件,本平台将应您的要求删除。
相关推荐:

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复