一、Aop
@Slf4j
@Aspect
//声明是bean组件
@Component
public class LogParamAop {
@Autowired
private LogParamService logParamService;
//定义切入点
@Pointcut("execution(public * com.qcby.xmfs.information1.controller..*.*(..))")
public void paramPointCut(){
}
//通知配置
@Around("paramPointCut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
//保存参数日志
LogParam logParam=new LogParam();
//获取用户名
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token= request.getHeader("token");
if (token!=null){
logParam.setUsername(JwtUtil.getUser(token).getUsername());
}
//获取接口名
MethodSignature signature=(MethodSignature) joinPoint.getSignature();
Method method=signature.getMethod();
logParam.setMethod(method.getName());
//获取入参
Object[] args =joinPoint.getArgs();
String paramIn= JSON.toJSONString(args);
logParam.setParamIn(paramIn);
//获取出参
Object param =joinPoint.proceed();
String paramOut=JSON.toJSONString(param);
logParam.setParamOut(paramOut);
//获取时间
LocalDateTime localDateTime= LocalDateTime.now();
logParam.setOperateTime(localDateTime);
log.info("开发测试:aop参数日志=》"+logParam);
logParamService.save(logParam);
return param;
}
}
二、自定义注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Module {
//模块名
String value() default "";
}
@Target(ElementType.METHOD) //注解级别,method:注解用在方法级别上
@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行,runime:运行时执行
@Documented //
public @interface Operate {
//操作名
String value() default "";
}
三、实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LogParam {
private Long id;
private Long username;
private String method;
private String paramIn;
private String paramOut;
private LocalDateTime operateTime;
}
四、结果

版权声明:本文为m0_57659908原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。