
top.doudou.common.aop.aspect.AspectUtils Maven / Gradle / Ivy
package top.doudou.common.aop.aspect;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import org.apache.commons.collections.MapUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;
import top.doudou.core.builder.JsonBuilder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.IntStream;
/**
* @author 傻男人<[email protected]>
* @Date: 2020/8/21 13:25
* @Version: 1.0
* @Description: 切面的工具类
*/
public class AspectUtils {
/**
* 获取参数列表
*
* @param joinPoint
* @return
*/
public static Map getParameters(JoinPoint joinPoint) {
Map result = Maps.newHashMap();
ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
//参数名
String[] parameterNames = pnd.getParameterNames(method);
if(null == parameterNames || parameterNames.length == 0){
return result;
}
//参数值
Object[] args = joinPoint.getArgs();
for (int i = 0; i < parameterNames.length; i++) {
Object arg = args[i];
result.put(parameterNames[i], !isIgnoreArgs(arg) ? arg : "[ignore]"+arg.getClass());
}
return result;
}
/**
* 获取参数列表
*
* @param joinPoint
* @return
*/
public static Map getParameterStr(JoinPoint joinPoint) {
Map result = Maps.newHashMap();
ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
String[] parameterNames = pnd.getParameterNames(method);
if(null == parameterNames || parameterNames.length == 0){
return result;
}
Object[] args = joinPoint.getArgs();
Gson gson = JsonBuilder.gson();
for (int i = 0; i < parameterNames.length; i++) {
Object arg = args[i];
result.put(parameterNames[i], !isIgnoreArgs(arg) ? gson.toJson(arg) : "[ignore]"+arg.getClass());
}
return result;
}
/**
* 获取参数列表
*
* @param joinPoint
* @return
*/
public static String getParametersToStr(JoinPoint joinPoint) {
Map parameters = getParameters(joinPoint);
return MapUtils.isNotEmpty(parameters) ? JsonBuilder.gsonNotSerializeNull().toJson(parameters) : "";
}
/**
* 判断是否需要过滤的对象。
*
* @param object 对象信息。
* @return 如果是需要过滤的对象,则返回true;否则返回false。
*/
private static boolean isIgnoreArgs(Object object) {
if(null == object){
return false;
}
Class> clazz = object.getClass();
// 处理数组的情况
if (clazz.isArray()) {
return IntStream.range(0, Array.getLength(object))
.anyMatch(index -> isIgnoreArgs(Array.get(object, index)));
}
// 递归,处理数组、Collection、Map 的情况
if (Collection.class.isAssignableFrom(clazz)) {
return ((Collection>) object).stream()
.anyMatch((Predicate
© 2015 - 2025 Weber Informatics LLC | Privacy Policy