• SpringAOP的应用-日志管理


    一、作用

    操作日志对于程序员或管理员而言,可以快速定位到系统中相关的操作,而对于操作日志的管理的实现不能对正常业务实现进行影响,否则即不满足单一原则,也会导致后续代码维护困难,因此我们考虑使用AOP切面技术来实现对日志管理的实现。使用SpringAOP动态代理,在不影响源代码的前提下,打印日志,源代码的改变不影响动态代码,耦合性低

    二、代码如下:

    控制层代码:

    /**
     * 
     * @version: 1.1.0
     * @Description: 控制层类
     * @author: wsq
     * @date: 2020年6月25日下午8:56:44
     */
    @RestController
    public class LogTestController {
        @GetMapping("/logTest")
        public void logTest(@RequestParam("id") int id, @RequestParam("name") String name) {
            System.out.println("id:" + id + "   " + "name:" + name);
        }
    
        @GetMapping("/logTest2")
        public void logTest2(@RequestParam("id2") int id, @RequestParam("name2") String name) {
            System.out.println("id2:" + id + "   " + "name2:" + name);
        }
    }

    日志管理类:

    /**
     * 
     * @version: 1.1.0
     * @Description: 日志管理类
     * @author: wsq
     * @date: 2020年6月25日下午8:57:22
     */
    @Component
    @Aspect
    public class WebLogAspect {
    // 创建日志
        private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
    
        @Pointcut("execution(* com.example.demo.controller..*.*(..))")
        public void logTestController() {
    
        }
    
    // 怎样操作传入参数
        @Before("logTestController() && args(id, name)")
        public void logTestControllerBefore(JoinPoint joinPoint, int id, String name) {
            System.err.println(id);
            System.err.println(name);
            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
            HttpServletRequest httpServletRequest = ((ServletRequestAttributes) requestAttributes).getRequest();
            // 记录下请求内容
            logger.info("#############URL:" + httpServletRequest.getRequestURI().toString());
            logger.info("#############HTTP_METHOD:" + httpServletRequest.getMethod());
            logger.info("#############IP:" + httpServletRequest.getRemoteAddr());
            logger.info("#############THE ARGS OF THE CONTROLLER:" + Arrays.toString(joinPoint.getArgs()));
            // 下面这个getSignature().getDeclaringTypeName()是获取包+类名的
            // 然后后面的joinPoint.getSignature.getName()获取了方法名
            logger.info("################CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "."
                    + joinPoint.getSignature().getName());
            logger.info("################TARGET: " + joinPoint.getTarget());// 返回的是需要加强的目标类的对象
            logger.info("################THIS: " + joinPoint.getThis());// 返回的是经过加强后的代理类的对象
        }
    }

     注:SpringAop实现拦截器,过程类似,取出token,session判断session,token是否失效即可

  • 相关阅读:
    控制论学习
    离开
    Python学习
    GHSpro多数据库连接
    django基础 第五章 Django连接数据库
    django基础 第四章 模板标签
    django基础 第三章 模板变量
    django基础 第二章 url配置及文件渲染
    django基础 第一章 环境搭建
    python基础 六、模块和包
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13192926.html
Copyright © 2020-2023  润新知