• Spring boot 自定义注解标签记录系统访问日志


    package io.renren.common.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * 系统日志注解
     *
     * @author Mark sunlightcs@gmail.com
     * @since 1.3.0 2017-03-08
     */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface SysLog {
    
        String value() default "";
    }
        /**
         * 保存
         */
        @SysLog("保存菜单")
    public R save(@RequestBody SysMenuEntity menu){
            //数据校验
            verifyForm(menu);
            
            sysMenuService.insert(menu);
            
            return R.ok();
        }
    import io.renren.common.annotation.SysLog;
    import io.renren.modules.sys.entity.SysLogEntity;
    import io.renren.modules.sys.entity.SysUserEntity;
    import io.renren.modules.sys.service.SysLogService;
    import io.renren.common.utils.HttpContextUtils;
    import io.renren.common.utils.IPUtils;
    
    import org.apache.shiro.SecurityUtils;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    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 javax.servlet.http.HttpServletRequest;
    import java.lang.reflect.Method;
    import java.util.Date;
    
    /**
     * 系统日志,切面处理类
     *
     * @author Mark sunlightcs@gmail.com
     * @since 1.3.0 2017-03-08
     */
    @Aspect
    @Component
    public class SysLogAspect {
        @Autowired
        private SysLogService sysLogService;
        
        @Pointcut("@annotation(io.renren.common.annotation.SysLog)")
        public void logPointCut() { 
            
        }
    
        @Around("logPointCut()")
        public Object around(ProceedingJoinPoint point) throws Throwable {
            long beginTime = System.currentTimeMillis();
            //执行方法
            Object result = point.proceed();
            //执行时长(毫秒)
            long time = System.currentTimeMillis() - beginTime;
    
            //保存日志
            saveSysLog(point, time);
    
            return result;
        }
    
        private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {
            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();
            try{
                String params = new Gson().toJson(args[0]);
                sysLog.setParams(params);
            }catch (Exception e){
    
            }
    
            //获取request
            HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
            //设置IP地址
            sysLog.setIp(IPUtils.getIpAddr(request));
    
            //用户名
            String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername();
            sysLog.setUsername(username);
    
            sysLog.setTime(time);
            sysLog.setCreateDate(new Date());
            //保存系统日志
            sysLogService.insert(sysLog);
        }
  • 相关阅读:
    python 替换图片中的像素
    python paddleocr 增加识别速度的方法
    mysql 子查询少用
    mysql 临时表代替in的方法
    mysql创建临时表不用创建临时表结构的方法
    Nginx 报错 connect() failed (110: Connection timed out) while connecting to upstream
    用mkcert生成SSL,内网完美起跑https
    用于制作任何echarts地图(省、市、区、城镇街道)
    javascript执行机制
    ES6便捷语法
  • 原文地址:https://www.cnblogs.com/yy123/p/9232507.html
Copyright © 2020-2023  润新知