`

springboot使用aop切面做用户操作日志记录

    博客分类:
  • JAVA
 
阅读更多
参考
https://blog.csdn.net/u2133048/article/details/98178861

https://blog.csdn.net/puhaiyang/article/details/78146620


spring cloud微服务架构想实现操作日志的切面
比如:rest层
    @ApiOperation("保存用户")
    @SysLogIntercept(action="save", description="保存用户")
    @RequestMapping(value = "saveUserInfo",method = RequestMethod.POST)
    public ObjectRestResponse<UserVo> saveUserInfo(@RequestBody UserVo userVo){
        if (userVo==null || userVo.getDeptId()==null || userVo.getJobId()==null ) {
            log.info("userVo为null 或 deptId为null 或 jobId为null=============");
            return new ObjectRestResponse().code(CodeConstants.STATUS_CODE_DATA_ID_NULL);
        }

        Msg msg = userManager.saveUserInfo(userVo);
        return new ObjectRestResponse().code(msg.getCode()).data(msg.getData()).bool(msg.getSucFlag()).msg(msg.getDesc()) ;
    }



    @ApiOperation("删除用户")
    @SysLogIntercept(action="delete", description="删除用户")
    @RequestMapping(value = "deleteUserInfo",method = RequestMethod.POST)
    public ObjectRestResponse deleteUserInfo(@RequestParam String objectIdStr) {
        if (StringUtils.isBlank(objectIdStr)) {
            log.info("objectIdStr为空=============");
            return new ObjectRestResponse().code(CodeConstants.STATUS_CODE_DATA_ID_NULL) ;
        }

        Msg msg = userManager.deleteUserInfo(objectIdStr.trim()) ;
        return new ObjectRestResponse().msg(msg.getDesc()).code(msg.getSucFlag() ? 0 : msg.getCode());
    }


SysLogIntercept是我定义的一个切面
因为新增保存和编辑保存是一个接口,需要区分操作日志是新增还是编辑,所以需要获取请求的参数,判断请求的参数中id的值是否为空
//获取目标方法的参数信息
        Object[] obj = joinPoint.getArgs();
        for (Object argItem : obj) {
            Object idObj = getValueByKey(argItem, "id");
            Long idLong = null ;
            idObj = (idObj!=null) ? (Long)idObj : null ;
            idValue = (idObj!=null) ? String.valueOf(idObj) : null ;
            System.out.println("---->saveParamInfo-->idValue:" + idValue);
        }


保存的时候,也不是调用了保存接口就一定会成功,有可能会保存提示重复,此时要区分保存后的返回数据是否成功,才插入日志
    /**
     * 环绕通知 @Around , 当然也可以使用 @Before (前置通知) @After (后置通知)
     *
     * @param joinPoint
     * @return
     * @throws Throwable
     */
    @AfterReturning(pointcut="@annotation(com.ronglian.kangrui.saasprivate.research.admin.components.SysLogIntercept)", returning="rvt")
    public void AfterExec(JoinPoint joinPoint,Object rvt){
        String sysAction = this.getSysAction(joinPoint) ;
        ObjectRestResponse restResponse = (ObjectRestResponse)rvt ;

        if(sysAction.equals("save")) {
            // 新增或编辑
            if (restResponse.getBoolResult()) {
                long beginTime = System.currentTimeMillis();
                long time = System.currentTimeMillis() - beginTime;

                Object object = ((ObjectRestResponse) rvt).getData() ;
                Long resultId = (object!=null) ? (Long)getValueByKey(object, "id")  :  null ;
                String resultIdStr = (object!=null) ? String.valueOf(resultId) :  null ;
                saveLog(joinPoint, resultIdStr);
            }
        } else {
            // 删除
            if (restResponse.getCode()==0){
                saveLog(joinPoint, idValue);
            }
        }

        log.info("rvt=={}", JSON.toJSONString(rvt) );
    }

分享到:
评论

相关推荐

    springBoot+aop+自定义注解+本地线程实现统一接口日志及接口响应时长

    拦截器的使用、aop切面的使用、如何自定义注解以及自定义注解的使用、本地线程的使用方法及适用场景 有不懂的地方可以找我,项目readme介绍提供了联系方式 拦截器+aop+自定义注解+本地线程实现统一接口日志记录

    解决springboot的aop切面不起作用问题(失效的排查)

    解决SpringBoot的AOP切面不起作用问题排查 SpringBoot中的AOP(Aspect-Oriented Programming)切面是指在业务逻辑中添加的额外功能,以实现日志记录、安全检查、事务管理等功能。但是,在实际开发中,我们可能会...

    SpringBoot使用AOP注解记录操作日志

    AOP(面向切面编程)是一种强大的工具,它允许我们在不改变原有业务逻辑的情况下,对代码进行横向扩展,比如添加日志记录功能。本篇文章将深入探讨如何在Spring Boot中利用AOP注解来实现操作日志的记录。 首先,...

    SpringBoot+AOP日志

    在本项目中,"SpringBoot+AOP日志"是一个基于Spring Boot框架的日志管理系统,它利用了Spring Boot的便利性和AOP(面向切面编程)技术来实现对应用程序日志的高效、统一处理。让我们深入探讨一下这个项目的核心知识...

    SpringBoot+AOP+TraceID.pdf

    在 SpringBoot 中,AOP 可以通过使用 @Aspect 注解来标注一个类,使其成为一个切面(Aspect)。切面可以包含多个通知(Advice),这些通知可以在方法的执行前、执行后、抛出异常时等不同时机执行。例如,在本文档中...

    Springboot整合Aop.zip

    这些关注点被称为“切面”,包括日志记录、异常处理、性能监控、事务管理等。在 AOP 中,切面可以独立于主业务逻辑编写,通过“织入”(Weaving)到目标对象中,实现功能的增强。 2. **SpringBoot 整合 AOP 的步骤*...

    SpringBoot中AOP与切面编程的技术解析及应用实例

    文章进一步展示了如何在SpringBoot中实现AOP,包括使用Spring的@Aspect注解定义切面、定义切点和通知的具体步骤。文中还提供了多个实用示例,如日志记录、性能监控、事务管理和缓存管理等。最后探讨了AOP的未来发展...

    springboot spring aop 拦截器注解方式实现脱敏

    在Spring Boot应用中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们创建横切关注点,如日志记录、权限检查等,这些关注点可以被编织到应用程序的多个点上,而无需侵入核心业务逻辑。在本案例中,我们将...

    SpringBoot整合aop面向切面编程过程解析

    SpringBoot整合AOP面向切面编程过程解析 AOP(Aspect Oriented Programming),即面向切面编程,是一种编程技术,通过预编译方式和运行期动态代理实现程序功能的统一维护。AOP是Spring框架中的一个重要内容,它通过...

    SpringBoot+AOP日志服务

    2. **创建AOP切面**: 在Spring Boot中,我们可以使用`@Aspect`注解来声明一个类作为切面。这个类通常会包含一个或多个`@Before`、`@After`、`@Around`、`@AfterReturning`或`@AfterThrowing`注解的方法,这些方法...

    springBoot+aop 简单demo

    而AOP(Aspect Oriented Programming,面向切面编程)则是Spring框架的一个重要特性,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强或日志记录等操作。现在我们来详细探讨Spring Boot集成AOP的基本...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、...

    springboot配置aop切面日志打印过程解析

    Spring Boot 配置 AOP 切面日志打印过程解析 本文主要介绍了 Spring Boot 配置 AOP 切面日志打印过程解析,...通过本文,读者可以了解 AOP 的基本概念和应用场景,并学会使用 Spring Boot 配置 AOP 切面日志打印功能。

    spring aop切面拦截指定类和方法实现流程日志跟踪

    接下来,我们需要创建一个切面类来处理具体的日志记录逻辑。 ```java @Component public class SpringAopLog { @Autowired private LogService logService; @Before("execution(* com.controller.web.*.*(..))...

    springboot基于AOP将web请求写入日志

    在Spring Boot中,AOP(面向切面编程)是一种强大的工具,可以让我们在不修改业务代码的情况下,实现如日志记录、性能监控等横切关注点。本教程将引导新手理解如何利用AOP来记录Web请求日志。下面将详细阐述这个过程...

    spring切面AOP所使用的jar包

    Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...

    SpringBoot之AOP面向切面编程实例.rar

    而AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者定义“切面”,这些切面可以封装系统中的交叉关注点,如日志、事务管理等,使得代码更加模块化和可维护。本实例将深入...

    springboot的aop使用

    通过使用AOP,开发者可以为认证方法的调用过程增加操作记录的逻辑,而无需修改原有业务方法的代码。 例子部分涉及了具体的代码实现。首先,需要在项目中引入Spring AOP的依赖。然后,定义一个注解...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    SpringBoot AOP,即面向切面编程,是Spring框架中的一个重要特性,用于实现代码的横切关注点,如日志记录、事务管理、权限验证等。AOP通过使用代理模式,将这些关注点与核心业务逻辑分离,使得代码更加模块化,更...

    使用SpringBoot+AOP实现可插拔式日志的示例代码

    使用 SpringBoot+AOP ...本文详细介绍了使用 SpringBoot+AOP 实现可插拔式日志的示例代码,包括创建 SysLog 注解、SysLogAspect 类,以及记录日志的逻辑。该示例代码对于大家的学习或者工作具有一定的参考学习价值。

Global site tag (gtag.js) - Google Analytics