package com.*.aop;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importlombok.extern.slf4j.Slf4j;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.Signature;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.aspectj.lang.annotation.Pointcut;importorg.springframework.stereotype.Component;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.util.ArrayList;importjava.util.List;/*** @Description //请求参数aop
**/@Component
@Aspect
@Slf4jpublic classRequestParameterAop {/*** @Description: 定义需要拦截的切面
* @Return: void
* @Author: yangli
* @Date: 2019/9/06-10:17
**/@Pointcut("execution(* com.*.controller.*Controller.*(..))")public voidmethodArgs() {
}
@Around("methodArgs()")public Object invoke(ProceedingJoinPoint joinPoint) throwsThrowable {
Object result= null;//获取请求参数进行打印
Signature signature =joinPoint.getSignature();
JSONObject signatureJson=JSON.parseObject(JSON.toJSONString(signature));//方法名
String methodName = signatureJson.getString("name");//类名
String serviceName = signatureJson.getString("declaringType");//参数名数组
JSONArray parameterNames = signatureJson.getJSONArray("parameterNames");//构造参数组集合
List argList = new ArrayList<>();for(Object arg : joinPoint.getArgs()) {//request/response无法使用toJSON
if (arg instanceofHttpServletRequest) {
argList.add("request");
}else if (arg instanceofHttpServletResponse) {
argList.add("response");
}else{
argList.add(JSON.toJSON(arg));
}
}try{
log.error("{} -> 方法({}) -> 参数:{} - {}", serviceName, methodName, JSON.toJSON(parameterNames), JSON.toJSON(argList));
}catch(Exception e) {
log.error("参数获取失败: {}", e.getMessage());
}
result=joinPoint.proceed();returnresult;
}
}