@Aspect @Component @Slf4j public class AESTimeAspect { @Around("execution(* com.trt.sea.xxserx.controller*..*Controller.*(..))") public Object handleAroundControllerMethod(ProceedingJoinPoint pjp) throws Throwable { long start = System.currentTimeMillis(); ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = sra.getRequest(); String method = request.getMethod(); String className = pjp.getTarget().getClass().getSimpleName(); String methodName = pjp.getSignature().getName(); Object[] args = pjp.getArgs(); // 解决部分参数不能序列化问题 It is illegal to call this method if the current request is not in asynchronous mode List<Object> logArgs = (ArrayUtils.isEmpty(args) ? Stream.empty() : Arrays.stream(args)).filter(arg -> (!(arg instanceof HttpServletRequest) && !(arg instanceof HttpServletResponse))) .collect(Collectors.toList()); String contentType = request.getHeader("Content-Type")+""; if("GET".equalsIgnoreCase(method)){ log.info("^^ enter {}.{} receive data with : {} ^", className,methodName,logArgs); }else { if(contentType.contains("x-www-form-urlencoded")){ log.info("^^ enter {}.{} ^^", className,methodName); }else { //multipart/form-data text/xml (xml) log.info("^^ enter {}.{} receive data with : {} ^^", className,methodName, JSON.toJSONString(logArgs)); } } Object object = pjp.proceed(); String costTime = (System.currentTimeMillis() - start) + ""; log.info("*** end run the method --> {} total cost time is {} ms ***", methodName, costTime); HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); // 我的所有响应数据都属JSONObject 统一加密 if (response != null && (object instanceof JSONObject)) { String resTs = System.currentTimeMillis() + ""; JSONObject resJson = (JSONObject) object; // 加密 todo 然后返回数据 response.addHeader("res-ts",resTs); response.setHeader("Access-Control-Expose-Headers","res-ts"); } return object; } }