• AOP记录日志


    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);
        }
  • 相关阅读:
    1.8.10- 表单域
    sublime常用快键键
    HTML常用标签
    1.8.9- 下拉菜单
    给定一个文件名,和字符串,统计字符中在文件中出现的次数
    初始easyUI
    关于maven的CoreException: Could not get the value for parameter compilerId for plugin 。。的错误
    1 创建一个存储过程,以及对存储过程的调用 MySQL
    Java 将word转为pdf jacob方式
    数据库查询的数据导出到xls表,集合数据导出到xls表
  • 原文地址:https://www.cnblogs.com/july-sunny/p/12057097.html
Copyright © 2020-2023  润新知