zoukankan      html  css  js  c++  java
  • aop实现接口请求参数打印

    1.面向切面编程(AOP)Aspect Oriented Programming。

    切面编程的目的是为了把通用逻辑从业务逻辑分离出来。

    作为一个Java开发,基本是离不开spring的,spring 的核心基础功能就是Ioc和Aop。

    这里我的应用是打印接口请求的URL、IP、请求方式以及入参,方便接口调试。

    2.代码如下,拷贝可以直接使用,很方便。没基础的同学,请自己先行补充理论知识。

    @Aspect
    @Component
    public class ParamLogAspect {
    
        private static final Logger logger = LoggerFactory.getLogger(ParamLogAspect.class);
    
        /**
         * 定义一个切点
         * 切入 controller包
         *      api包
         *      commonInterface.controller
         *      commonInterface.service.impl
         *      下的所有类的所有方法
         */
        @Pointcut("execution(* com.meritdata.cloud.shellmiddleplatform.dataservice.fourInOne.controller.*.*(..))" +
                "||execution(* com.meritdata.cloud.shellmiddleplatform.dataservice.fourInOne.api.*.*(..)) " +
                "||execution(* com.meritdata.cloud.shellmiddleplatform.dataservice.fourInOne.commonInterface.controller.*.*(..)) ")
        public void validateMethod(){
    
        }
    
        @Before("validateMethod()")
        public void validate(JoinPoint joinPoint){
    
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            logger.info("=====URL : " + request.getRequestURL().toString());
            logger.info("=====IP : " + request.getRemoteAddr()+"  HTTP_METHOD :" + request.getMethod());
            StringBuffer body = new StringBuffer();
            Object[] arguments = joinPoint.getArgs();
            //获取方法的参数
            if(arguments.length!=0){
                try {
                    Map<String, Object> params = params = (Map<String, Object>)arguments[0];
                    for (String key:params.keySet()
                    ) {
                        body.append(key).append(":").append(params.get(key)).append(";");
                    }
                    if(body.toString().length()==0){
                        logger.info("body参数为空!");
                    }else {
                        logger.info("=====方法接收参数[{}]",body.toString().substring(0,body.toString().length()-1));
                    }
    
                }catch (Exception ex){
                    logger.info("=====方法接收参数[{}]",arguments[0].toString());
                }
            }
    
            //获取问号拼接的参数:
            Enumeration<String> enu = request.getParameterNames();
            while (enu.hasMoreElements()) {
                String paraName = (String) enu.nextElement();
                if (!StringUtils.isEmpty(request.getParameter(paraName))) {
                    logger.info("=====问号后param : " + paraName + " : " + request.getParameter(paraName));
                }
            }
    
        }
    
    
    }
    播种和收获通常不在一个季节,而中间的过程叫做坚持~
  • 相关阅读:
    让我用69406条评论告诉你“反贪风暴”好不好看!!!
    【大数据】爬取全部的校园新闻
    【大数据】获取一篇新闻的全部信息
    【大数据】理解爬虫原理
    中文统计
    [大数据]统计词频
    数据库表设计以及表字段命名
    设计模式的理论理解
    文件上传之oss服务器上传文件简笔
    QueryWrapper/UpdateWrapper认识
  • 原文地址:https://www.cnblogs.com/shog808/p/13367180.html
Copyright © 2011-2022 走看看