1.自定義注解
@Target(ElementType.METHOD) //注解放置的目標位置,METHOD是可注解在方法級別上 @Retention(RetentionPolicy.RUNTIME) //注解在哪個階段執行 @Documented //生成文檔 public @interface RptLog { String value() default ""; }
2.aop相關的配置類
@Slf4j @Aspect @Component public class RptOperateLogAspect { @Autowired @SuppressWarnings("all") private RptOperateLogMapper rptOperateLogMapper; @Autowired private UserService userService; //定義切點 @Pointcut //在注解的位置切入代碼 @Pointcut("@annotation(com.in.g.data.config.RptLog)") public void logPoinCut() { } //切面 配置通知 @AfterReturning("logPoinCut()") public void saveSysLog(JoinPoint joinPoint) { System.out.println("報表系統記錄操作日志"); //保存日志 RptOperateLog rptOperateLog = new RptOperateLog(); //從切面織入點處通過反射機制獲取織入點處的方法 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); //獲取切入點所在的方法 Method method = signature.getMethod(); //獲取當前用戶操作信息 Object[] args = joinPoint.getArgs(); if (ArrayUtils.isNotEmpty(args)){ Integer id = (Integer) args[0]; //記錄操作用戶的信息 SessionUserDTO user = userService.getUser(id); rptOperateLog.setRole(user.getRoleName()); rptOperateLog.setUsername(user.getFullName()); rptOperateLog.setAccount(user.getUserName()); } RptLog rptLog = method.getAnnotation(RptLog.class); if (rptLog != null) { String value = rptLog.value(); //操作名稱 rptOperateLog.setOperateContent(value); } HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); //操作時間 rptOperateLog.setOperateTime(new Date()); //操作用戶ip地址 rptOperateLog.setIpAddress(IpAddressUtil.getIpAddr(request)); //操作設備信息 String deviceInfo = AgentUserKit.getDeviceInfo(request); rptOperateLog.setDevice(deviceInfo); //保存操作日志 rptOperateLogMapper.saveLog(rptOperateLog); log.info("報表日志保存成功 rptOperateLog:[{}]",rptOperateLog); } }
3.使用自定義注解
@GetMapping("/customer_info") @RptLog(value = "下載-客戶詳情報表") public Result customerInfoExcelGenerate(@RequestHeader(CommonConstant.X_OPERATOR_ID) Integer loginId, @Validated CustomerInfoDTO customerInfoDTO) { iReportExcelRecordService.customerInfoExcelGenerate(loginId,customerInfoDTO); return Result.success(null); }