package com.zkh360.core.config; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; @Aspect @Component @Slf4j public class WebLogAspect { @Pointcut("execution(public * com.zkh360.api..controller.*.*(..))")//两个..代表所有子目录,最后括号里的两个..代表所有参数 public void logPointCut() { } @Before("logPointCut()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 log.info("请求地址 : " + request.getRequestURL().toString()); String requestAuthorization = request.getHeader("Authorization"); log.info("请求的Authorization:"+requestAuthorization); log.info("请求的终端:"+request.getHeader("user-agent")); log.info("HTTP METHOD : " + request.getMethod()); log.info("IP : " + request.getRemoteAddr()); log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); //登陆接口用户密码加密 String url = request.getRequestURL().toString().substring(request.getRequestURL().toString().length()-10); if(url != null && url.equals("user/login")){ String s = Arrays.toString(joinPoint.getArgs()); String params = ""; String invoiceId = ""; String username = ""; String[] split = s.split(","); String[] rightStr = new String[split.length]; String str = ""; for (int i = 0; i < split.length; i++) { str = split[2]; String[] temp = split[i].split("="); rightStr[i] = temp[1]; } String str2 = ""; String[] split1 = str.split("="); for (int i = 0; i < split1.length; i++) { str2 = split1[1]; } for (int i = 0; i < rightStr.length; i++) { invoiceId = rightStr[0]; username = rightStr[1]; } final String passWord = MD5Util.md5(str2); // params = "invoiceId="+invoiceId+",username="+username+",password="+passWord; params = "invoiceId="+invoiceId+",username="+username; log.info("参数 : " + params); }else{ log.info("参数 : " + Arrays.toString(joinPoint.getArgs())); } } @AfterReturning(returning = "ret", pointcut = "logPointCut()")// returning的值和doAfterReturning的参数名一致 public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 log.info("接口返回值 : " + ret); } @Around("logPointCut()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { long startTime = System.currentTimeMillis(); Object ob = pjp.proceed();// ob 为方法的返回值 log.info("接口总耗时 : " + (System.currentTimeMillis() - startTime)); return ob; } }