package me.zhengjie.aspect; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; 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.aspectj.lang.reflect.CodeSignature; import org.slf4j.MDC; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.UUID; @Slf4j @Aspect @Component public class LogRequestParam { @Pointcut("execution(* me.zhengjie.application.*.controller..*.*(..))") public void pointCut() { } @Before(value = "pointCut()") public void doBefore(JoinPoint joinPoint) { try { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); if (Objects.isNull(servletRequestAttributes)) { return; } HttpServletRequest request = servletRequestAttributes.getRequest(); String ip = request.getRemoteAddr(); String uri = request.getRequestURI(); Object[] parameterValues = joinPoint.getArgs(); int parameterValuesLength = parameterValues.length; if (parameterValuesLength == 0) { log.debug("[请求参数] - 无"); return; } Signature signature = joinPoint.getSignature(); if (Objects.isNull(signature)) { return; } String[] parameterNames = ((CodeSignature) signature).getParameterNames(); if (Objects.isNull(parameterNames) || parameterNames.length != parameterValuesLength) { return; } Map params = new HashMap<>(4); for (int i = 0; i < parameterNames.length; i++) { Object o = parameterNames[i]; if (o instanceof MultipartFile || o instanceof MultipartFile[] || o instanceof HttpServletRequest || o instanceof HttpServletResponse) { continue; } params.put(parameterNames[i], parameterValues[i]); } Object[] obj = { ip, uri, JSON.toJSONString(params, SerializerFeature.WriteMapNullValue) }; log.info("[request] - ip: {} , requestUrl: {} ,param: {} ", obj); } catch (Exception e) { e.printStackTrace(); } } @AfterReturning(returning = "result", pointcut = "pointCut() ") public void doAfterReturning(Object result) { try { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); if (Objects.isNull(servletRequestAttributes)) { return; } HttpServletResponse response = servletRequestAttributes.getResponse(); if (Objects.isNull(response)) { return; } int status = response.getStatus(); HttpServletRequest request = servletRequestAttributes.getRequest(); String uri = request.getRequestURI(); Object obj[] = { status, uri, JSON.toJSONString(result, SerializerFeature.WriteMapNullValue) }; log.info("[reponse] - status: {} , url:{} ,result:{}", obj); } catch (Exception e) { e.printStackTrace(); } } }