AOP拦截请求参数和返回数据打印

package com.peng.wx.interceptor;

import com.sun.deploy.Environment;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Map;

@Aspect
@Component
public class GloberLogAspect {

    @Value("${environment}")
    private String environment;

    @Resource
    private HttpServletRequest request;

    public Log log = LogFactory.getLog(GloberLogAspect.class);

    @Pointcut("execution(* com.peng.wx.controller*..*(..))")
    public void log() {
        log.info(request.getParameterMap());
    }

    @Before("log()")
    public void before(JoinPoint joinPoint) {
        if (StringUtils.equals(environment, "dev")) {
            StringBuilder sb = new StringBuilder("\n------------------------------------hkb-wx----------------------------------------\n")
                    .append("AskDate     : ")
                    .append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()))
                    .append("\n");
            sb.append("IP          : " + request.getRemoteAddr()).append("\n");
            sb.append("Controller  : ").append(joinPoint.getTarget().getClass().getName()).append(".(")
                    .append(joinPoint.getTarget().getClass().getSimpleName()).append(".java:1)");
            sb.append("\nMethod      : ").append(joinPoint.getSignature().getName()).append("\n");
            String uri = request.getRequestURI();
            if (uri != null) {
                sb.append("url         : ").append(uri).append("\n");
            }
            Enumeration<String> e = request.getParameterNames();
            if (e.hasMoreElements()) {
                sb.append("Parameter   : ");
                while (e.hasMoreElements()) {
                    String name = e.nextElement();
                    String[] values = request.getParameterValues(name);
                    if (values.length == 1) {
                        sb.append(name).append("=").append(values[0]);
                    } else {
                        sb.append(name).append("[]={");
                        for (int i = 0; i < values.length; i++) {
                            if (i > 0)
                                sb.append(",");
                            sb.append(values[i]);
                        }
                        sb.append("}");
                    }
                    sb.append("  ");
                }
                sb.append("\n");
            }
            sb.append("--------------------------------------------------------------------------------\n");
            log.info(sb.toString());
        } else {
            StringBuilder sb = new StringBuilder();
            sb.append(request.getRequestURI()).append(", ");
            sb.append("IP: " + request.getRemoteAddr()).append(", [");
            Map<String, String[]> parameters = request.getParameterMap();
            for (Map.Entry<String, String[]> entity : parameters.entrySet()) {
                sb.append(String.format("%s = %s, ", entity.getKey(), StringUtils.join(entity.getValue(), ',')));
            }
            sb.delete(sb.length() - 2, sb.length()).append("]");
            log.info(sb.toString());
        }
    }

    @AfterReturning(pointcut = "log()", returning = "returnValue")
    public void afterReturning(JoinPoint joinPoint, Object returnValue) {
        log.info("return value is "+returnValue);
    }

}

转载于:https://my.oschina.net/u/3576777/blog/3048800

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值