From 22a9b4588c8eeefdb9e16fda9125af8c0b846b49 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 26 九月 2024 18:00:39 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java |  391 +++++++++++++++++++++++++------------------------------
 1 files changed, 180 insertions(+), 211 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
index e4f2dd0..a3220ef 100644
--- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
+++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
@@ -31,219 +31,188 @@
 
 /**
  * 操作日志记录处理
- * 
+ *
  * @author ruoyi
  */
 @Aspect
 @Component
-public class LogAspect
-{
-    private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
-
-    /** 排除敏感属性字段 */
-    public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" };
-
-    /** 计算操作消耗时间 */
-    private static final ThreadLocal<Long> TIME_THREADLOCAL = new NamedThreadLocal<Long>("Cost Time");
-
-    @Autowired
-    private AsyncLogService asyncLogService;
-
-    /**
-     * 处理请求前执行
-     */
-    @Before(value = "@annotation(controllerLog)")
-    public void boBefore(JoinPoint joinPoint, Log controllerLog)
-    {
-        TIME_THREADLOCAL.set(System.currentTimeMillis());
-    }
-
-    /**
-     * 处理完请求后执行
-     *
-     * @param joinPoint 切点
-     */
-    @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")
-    public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult)
-    {
-        handleLog(joinPoint, controllerLog, null, jsonResult);
-    }
-
-    /**
-     * 拦截异常操作
-     * 
-     * @param joinPoint 切点
-     * @param e 异常
-     */
-    @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
-    public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e)
-    {
-        handleLog(joinPoint, controllerLog, e, null);
-    }
-
-    protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult)
-    {
-        try
-        {
-            // *========数据库日志=========*//
-            SysOperLog operLog = new SysOperLog();
-            operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
-            // 请求的地址
-            String ip = IpUtils.getIpAddr();
-            operLog.setOperIp(ip);
-            operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
-            String username = SecurityUtils.getUsername();
-            if (StringUtils.isNotBlank(username))
-            {
-                operLog.setOperName(username);
-            }
-
-            if (e != null)
-            {
-                operLog.setStatus(BusinessStatus.FAIL.ordinal());
-                operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
-            }
-            // 设置方法名称
-            String className = joinPoint.getTarget().getClass().getName();
-            String methodName = joinPoint.getSignature().getName();
-            operLog.setMethod(className + "." + methodName + "()");
-            // 设置请求方式
-            operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
-            // 处理设置注解上的参数
-            getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
-            // 设置消耗时间
-            operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get());
-            // 保存数据库
-            asyncLogService.saveSysLog(operLog);
-        }
-        catch (Exception exp)
-        {
-            // 记录本地异常日志
-            log.error("异常信息:{}", exp.getMessage());
-            exp.printStackTrace();
-        }
-        finally
-        {
-            TIME_THREADLOCAL.remove();
-        }
-    }
-
-    /**
-     * 获取注解中对方法的描述信息 用于Controller层注解
-     * 
-     * @param log 日志
-     * @param operLog 操作日志
-     * @throws Exception
-     */
-    public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception
-    {
-        // 设置action动作
-        operLog.setBusinessType(log.businessType().ordinal());
-        // 设置标题
-        operLog.setTitle(log.title());
-        // 设置操作人类别
-        operLog.setOperatorType(log.operatorType().ordinal());
-        // 是否需要保存request,参数和值
-        if (log.isSaveRequestData())
-        {
-            // 获取参数的信息,传入到数据库中。
-            setRequestValue(joinPoint, operLog, log.excludeParamNames());
-        }
-        // 是否需要保存response,参数和值
-        if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult))
-        {
-            operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000));
-        }
-    }
-
-    /**
-     * 获取请求的参数,放到log中
-     * 
-     * @param operLog 操作日志
-     * @throws Exception 异常
-     */
-    private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog, String[] excludeParamNames) throws Exception
-    {
-        String requestMethod = operLog.getRequestMethod();
-        Map<?, ?> paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest());
-        if (StringUtils.isEmpty(paramsMap)
-                && (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)))
-        {
-            String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames);
-            operLog.setOperParam(StringUtils.substring(params, 0, 2000));
-        }
-        else
-        {
-            operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter(excludeParamNames)), 0, 2000));
-        }
-    }
-
-    /**
-     * 参数拼装
-     */
-    private String argsArrayToString(Object[] paramsArray, String[] excludeParamNames)
-    {
-        String params = "";
-        if (paramsArray != null && paramsArray.length > 0)
-        {
-            for (Object o : paramsArray)
-            {
-                if (StringUtils.isNotNull(o) && !isFilterObject(o))
-                {
-                    try
-                    {
-                        String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter(excludeParamNames));
-                        params += jsonObj.toString() + " ";
-                    }
-                    catch (Exception e)
-                    {
-                    }
-                }
-            }
-        }
-        return params.trim();
-    }
-
-    /**
-     * 忽略敏感属性
-     */
-    public PropertyPreExcludeFilter excludePropertyPreFilter(String[] excludeParamNames)
-    {
-        return new PropertyPreExcludeFilter().addExcludes(ArrayUtils.addAll(EXCLUDE_PROPERTIES, excludeParamNames));
-    }
-
-    /**
-     * 判断是否需要过滤的对象。
-     * 
-     * @param o 对象信息。
-     * @return 如果是需要过滤的对象,则返回true;否则返回false。
-     */
-    @SuppressWarnings("rawtypes")
-    public boolean isFilterObject(final Object o)
-    {
-        Class<?> clazz = o.getClass();
-        if (clazz.isArray())
-        {
-            return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
-        }
-        else if (Collection.class.isAssignableFrom(clazz))
-        {
-            Collection collection = (Collection) o;
-            for (Object value : collection)
-            {
-                return value instanceof MultipartFile;
-            }
-        }
-        else if (Map.class.isAssignableFrom(clazz))
-        {
-            Map map = (Map) o;
-            for (Object value : map.entrySet())
-            {
-                Map.Entry entry = (Map.Entry) value;
-                return entry.getValue() instanceof MultipartFile;
-            }
-        }
-        return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
-                || o instanceof BindingResult;
-    }
+public class LogAspect {
+	private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
+	
+	/**
+	 * 排除敏感属性字段
+	 */
+	public static final String[] EXCLUDE_PROPERTIES = {"password", "oldPassword", "newPassword", "confirmPassword"};
+	
+	/**
+	 * 计算操作消耗时间
+	 */
+	private static final ThreadLocal<Long> TIME_THREADLOCAL = new NamedThreadLocal<Long>("Cost Time");
+	
+	@Autowired
+	private AsyncLogService asyncLogService;
+	
+	/**
+	 * 处理请求前执行
+	 */
+	@Before(value = "@annotation(controllerLog)")
+	public void boBefore(JoinPoint joinPoint, Log controllerLog) {
+		TIME_THREADLOCAL.set(System.currentTimeMillis());
+	}
+	
+	/**
+	 * 处理完请求后执行
+	 *
+	 * @param joinPoint 切点
+	 */
+	@AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")
+	public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) {
+		handleLog(joinPoint, controllerLog, null, jsonResult);
+	}
+	
+	/**
+	 * 拦截异常操作
+	 *
+	 * @param joinPoint 切点
+	 * @param e         异常
+	 */
+	@AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
+	public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) {
+		handleLog(joinPoint, controllerLog, e, null);
+	}
+	
+	protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) {
+		try {
+			// *========数据库日志=========*//
+			SysOperLog operLog = new SysOperLog();
+			operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
+			// 请求的地址
+			String ip = IpUtils.getIpAddr();
+			operLog.setOperIp(ip);
+			operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
+			String username = SecurityUtils.getUsername();
+			if (StringUtils.isNotBlank(username)) {
+				operLog.setOperName(username);
+			}
+			
+			if (e != null) {
+				operLog.setStatus(BusinessStatus.FAIL.ordinal());
+				operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
+			}
+			// 设置方法名称
+			String className = joinPoint.getTarget().getClass().getName();
+			String methodName = joinPoint.getSignature().getName();
+			operLog.setMethod(className + "." + methodName + "()");
+			// 设置请求方式
+			operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
+			// 处理设置注解上的参数
+			getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
+			// 设置消耗时间
+			operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get());
+			// 保存数据库
+			asyncLogService.saveSysLog(operLog);
+		} catch (Exception exp) {
+			// 记录本地异常日志
+			log.error("异常信息:{}", exp.getMessage());
+			exp.printStackTrace();
+		} finally {
+			TIME_THREADLOCAL.remove();
+		}
+	}
+	
+	/**
+	 * 获取注解中对方法的描述信息 用于Controller层注解
+	 *
+	 * @param log     日志
+	 * @param operLog 操作日志
+	 * @throws Exception
+	 */
+	public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception {
+		// 设置action动作
+		operLog.setBusinessType(log.businessType().ordinal());
+		// 设置标题
+		operLog.setTitle(log.title());
+		// 设置操作人类别
+		operLog.setOperatorType(log.operatorType().ordinal());
+		// 是否需要保存request,参数和值
+		if (log.isSaveRequestData()) {
+			// 获取参数的信息,传入到数据库中。
+			setRequestValue(joinPoint, operLog, log.excludeParamNames());
+		}
+		// 是否需要保存response,参数和值
+		if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) {
+			operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000));
+		}
+	}
+	
+	/**
+	 * 获取请求的参数,放到log中
+	 *
+	 * @param operLog 操作日志
+	 * @throws Exception 异常
+	 */
+	private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog, String[] excludeParamNames) throws Exception {
+		String requestMethod = operLog.getRequestMethod();
+		Map<?, ?> paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest());
+		if (StringUtils.isEmpty(paramsMap)
+				&& (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))) {
+			String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames);
+			operLog.setOperParam(StringUtils.substring(params, 0, 2000));
+		} else {
+			operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter(excludeParamNames)), 0, 2000));
+		}
+	}
+	
+	/**
+	 * 参数拼装
+	 */
+	private String argsArrayToString(Object[] paramsArray, String[] excludeParamNames) {
+		String params = "";
+		if (paramsArray != null && paramsArray.length > 0) {
+			for (Object o : paramsArray) {
+				if (StringUtils.isNotNull(o) && !isFilterObject(o)) {
+					try {
+						String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter(excludeParamNames));
+						params += jsonObj.toString() + " ";
+					} catch (Exception e) {
+					}
+				}
+			}
+		}
+		return params.trim();
+	}
+	
+	/**
+	 * 忽略敏感属性
+	 */
+	public PropertyPreExcludeFilter excludePropertyPreFilter(String[] excludeParamNames) {
+		return new PropertyPreExcludeFilter().addExcludes(ArrayUtils.addAll(EXCLUDE_PROPERTIES, excludeParamNames));
+	}
+	
+	/**
+	 * 判断是否需要过滤的对象。
+	 *
+	 * @param o 对象信息。
+	 * @return 如果是需要过滤的对象,则返回true;否则返回false。
+	 */
+	@SuppressWarnings("rawtypes")
+	public boolean isFilterObject(final Object o) {
+		Class<?> clazz = o.getClass();
+		if (clazz.isArray()) {
+			return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
+		} else if (Collection.class.isAssignableFrom(clazz)) {
+			Collection collection = (Collection) o;
+			for (Object value : collection) {
+				return value instanceof MultipartFile;
+			}
+		} else if (Map.class.isAssignableFrom(clazz)) {
+			Map map = (Map) o;
+			for (Object value : map.entrySet()) {
+				Map.Entry entry = (Map.Entry) value;
+				return entry.getValue() instanceof MultipartFile;
+			}
+		}
+		return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
+				|| o instanceof BindingResult;
+	}
 }

--
Gitblit v1.7.1