使用Springboot自定义注解整合操作日志管理

第一步:自定义注解类

/**
 * @author: huangnenghuan
 * @create: 2020/09/29
 * @description: 操作日志注解
 **/
@Order(-2147483648)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface OperLog {

    // 菜单名称,如数据项
    String name();

    // 功能名称,如分页查询
    String desc();

    // 操作类型
    OperLogEnum action();

    // 是否插入请求参数
    boolean isAddParam() default true;

    /**
     * 操作日志类型
     */
    public enum OperLogEnum {
        add,
        update,
        delete,
        query,
        upload,
        download
    }

}

第二步:编写切面方法

/**
 * @author: huangnenghuan
 * @create: 2020/09/29
 * @description:
 **/
@Aspect
@Component
public class OperLogAspect {

    private Logger logger = LoggerFactory.getLogger(OperLogAspect.class);

    /**
     * 定义切入点
     */
    @Pointcut("@annotation( com.qualitycheck.hnhqualitycheck.annotation.OperLog )")
    public void OperLogs() {

    }

    @Before(value = "OperLogs()")
    public void logBefore(JoinPoint joinPoint){
        try {
            //获取当前类象
            Class<?> clazz = joinPoint.getTarget().getClass();
            // 获取当前类的执行的方法
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            Method method = clazz.getMethod(signature.getMethod().getName(), signature.getMethod().getParameterTypes());

            // 获取注解里的参数
            OperLog log = method.getAnnotation(OperLog.class);

            // 获取请求参数
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            //String param = JSON.toJSON(new PageData(request)).toString();
            //获取请求路径
            String url = request.getRequestURL().toString();
            //获取菜单名称
            String name = log.name();
            //获取功能名称
            String desc = log.desc();
            // 获取操作类型
            String action = log.action().name();
            // 获取是否插入参数
            boolean isAddParam = log.isAddParam();
            //param = isAddParam ? param : null;
            // 获取操作人
            SysUser sysUser = getSysUser(request);
            System.out.print("aaaaaaaaaaaaaaaaaaaaaaa"+sysUser);
        }catch (Exception e){
            logger.error("写入操作日志失败!", e.getMessage());
        }
    }

    private SysUser getSysUser(HttpServletRequest request){
        SessionVo sessionVo = (SessionVo) request.getSession().getAttribute("SessionVo");
        if(CommonUtil.isNotNull(sessionVo.getSysUser())){
            return sessionVo.getSysUser();
        }else{
            return null;
        }
    }
}

第三步:在controller中加入自定义注解

    @ResponseBody
    @RequestMapping("/getUsersData")
    @OperLog(name = "用户管理", desc = "获取用户数据", action = OperLog.OperLogEnum.query)
    public Map<String,Object> getUsersData(HttpServletRequest request, @RequestParam(value = "loginName") String loginName, @RequestParam(value = "deptId") String deptId,
                                           @RequestParam(value = "page") Integer page, @RequestParam(value = "limit") Integer limit){
        SessionVo sessionVo = (SessionVo) request.getSession().getAttribute("SessionVo");
        Map<String,Object> rsMap = new HashMap<>();
        IPage<SysUser> iPage = sysUserService.findByLoginNamePage(sessionVo.getSysUser().getBusinessId(), deptId, loginName, page, limit);
        rsMap.put("code", 0);
        rsMap.put("count", iPage.getSize());
        rsMap.put("data", iPage.getRecords());
        return rsMap;
    }

注意:如果自定义注解无效,可以查看是否少引入包

        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.14</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值