• 使用切面实现记录操作日志


    @Aspect
    @Component
    public class SysLogAspect {
        @Autowired
        private SysLogService sysLogService;
    
        /**
         * 切点
         */
        @Pointcut("@annotation(com.platform.annotation.SysLog)")
        public void logPointCut() {
    
        }
    
        /**
         * 前置通知
         *
         * @param joinPoint 连接点
         */
        @Before("logPointCut()")
        public void saveSysLog(JoinPoint joinPoint) {
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            Method method = signature.getMethod();
    
            SysLogEntity sysLog = new SysLogEntity();
            SysLog syslog = method.getAnnotation(SysLog.class);
            if (syslog != null) {
                //注解上的描述
                sysLog.setOperation(syslog.value());
            }
    
            //请求的方法名
            String className = joinPoint.getTarget().getClass().getName();
            String methodName = signature.getName();
            sysLog.setMethod(className + "." + methodName + "()");
    
            //请求的参数
            Object[] args = joinPoint.getArgs();
            String params = JSON.toJSONString(args[0]);
            sysLog.setParams(params);
    
            //获取request
            HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
            //设置IP地址
            sysLog.setIp(IPUtils.getIpAddr(request));
    
            //用户名
            SysUserEntity sysUserEntity = ShiroUtils.getUserEntity();
            String username = "";
            if ("login".equals(methodName)) {
                username = params;
            }
            if (null != sysUserEntity) {
                username = ShiroUtils.getUserEntity().getUsername();
            }
            sysLog.setUsername(username);
    
            sysLog.setCreateDate(new Date());
            //保存系统日志
            sysLogService.save(sysLog);
        }
    
    }
    
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface SysLog {
    
        String value() default "操作日志";
    }

    @SysLog("删除菜单")
    @RequestMapping("/delete")
    @RequiresPermissions("sys:menu:delete")
    public R delete(@RequestBody Long[] menuIds) {
        for (Long menuId : menuIds) {
            if (menuId.longValue() <= 30) {
                return R.error("系统菜单,不能删除");
            }
        }
        sysMenuService.deleteBatch(menuIds);
    
        return R.ok();
    }

  • 相关阅读:
    SAP 快速Debug财务替代GGB1
    Java代码质量评估工具
    如何使用现有工具三分钟之内从无到有设计一款滤波器?
    商机来了,又一电商巨头即将诞生!
    系统权限-数据权限案例分析
    【算法练习Day42】买卖股票的最佳时机 III&&买卖股票的最佳时机 IV
    一文速学 - PHP7特性
    关于硕士论文盲审的一些感受
    【线性代数】【二】2.6 矩阵的四种基本子空间
    13.4web自动化测试(Selenium3+Java)
  • 原文地址:https://blog.csdn.net/qq_42093488/article/details/125537602