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));
                }
            }
    
        }
    
    
    }
    播种和收获通常不在一个季节,而中间的过程叫做坚持~
  • 相关阅读:
    ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
    Using BitBucket for Source Control
    我去年写的数据访问层(EF篇)
    asp.net 导出Excel 设置格式
    各方面小知识点总结
    JavaWeb知识
    运行命令对电脑的操作(Windows + R)
    Android开发中用到的命令 —— 整理贴(转自别人,继续完善中...)
    解析XML文件(包含DOM4J,Xpath,SAX)第一部分
    SharePoint 2010 C# 获取People Or Group
  • 原文地址:https://www.cnblogs.com/shog808/p/13367180.html
Copyright © 2011-2022 走看看