| | |
| | | package com.ruoyi.framework.aspectj; |
| | | |
| | | import cn.hutool.core.lang.Validator; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.ruoyi.common.annotation.Log; |
| | | import com.ruoyi.common.core.domain.model.LoginUser; |
| | | import com.ruoyi.common.enums.BusinessStatus; |
| | | import com.ruoyi.common.enums.HttpMethod; |
| | | import com.ruoyi.common.utils.JsonUtils; |
| | | import com.ruoyi.common.utils.ServletUtils; |
| | | import com.ruoyi.common.utils.ip.IpUtils; |
| | | import com.ruoyi.common.utils.spring.SpringUtils; |
| | | import com.ruoyi.framework.manager.AsyncManager; |
| | | import com.ruoyi.framework.manager.factory.AsyncFactory; |
| | | import com.ruoyi.framework.web.service.AsyncService; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.domain.SysOperLog; |
| | | import org.aspectj.lang.JoinPoint; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.lang.reflect.Method; |
| | | import java.util.Collection; |
| | | import java.util.Iterator; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 操作日志记录处理 |
| | | * |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Aspect |
| | |
| | | |
| | | /** |
| | | * 拦截异常操作 |
| | | * |
| | | * |
| | | * @param joinPoint 切点 |
| | | * @param e 异常 |
| | | */ |
| | |
| | | SysOperLog operLog = new SysOperLog(); |
| | | operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); |
| | | // 请求的地址 |
| | | String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); |
| | | String ip = ServletUtils.getClientIP(); |
| | | operLog.setOperIp(ip); |
| | | // 返回参数 |
| | | operLog.setJsonResult(JSON.toJSONString(jsonResult)); |
| | | operLog.setJsonResult(JsonUtils.toJsonString(jsonResult)); |
| | | |
| | | operLog.setOperUrl(ServletUtils.getRequest().getRequestURI()); |
| | | if (loginUser != null) |
| | |
| | | // 处理设置注解上的参数 |
| | | getControllerMethodDescription(joinPoint, controllerLog, operLog); |
| | | // 保存数据库 |
| | | AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); |
| | | SpringUtils.getBean(AsyncService.class).recordOper(operLog); |
| | | } |
| | | catch (Exception exp) |
| | | { |
| | |
| | | |
| | | /** |
| | | * 获取注解中对方法的描述信息 用于Controller层注解 |
| | | * |
| | | * |
| | | * @param log 日志 |
| | | * @param operLog 操作日志 |
| | | * @throws Exception |
| | |
| | | |
| | | /** |
| | | * 获取请求的参数,放到log中 |
| | | * |
| | | * |
| | | * @param operLog 操作日志 |
| | | * @throws Exception 异常 |
| | | */ |
| | |
| | | */ |
| | | private String argsArrayToString(Object[] paramsArray) |
| | | { |
| | | String params = ""; |
| | | StringBuilder params = new StringBuilder(); |
| | | if (paramsArray != null && paramsArray.length > 0) |
| | | { |
| | | for (int i = 0; i < paramsArray.length; i++) |
| | | { |
| | | if (!isFilterObject(paramsArray[i])) |
| | | { |
| | | Object jsonObj = JSON.toJSON(paramsArray[i]); |
| | | params += jsonObj.toString() + " "; |
| | | } |
| | | } |
| | | for (Object o : paramsArray) { |
| | | if (Validator.isNotNull(o) && !isFilterObject(o)) { |
| | | params.append(JsonUtils.toJsonString(o)).append(" "); |
| | | } |
| | | } |
| | | } |
| | | return params.trim(); |
| | | return params.toString().trim(); |
| | | } |
| | | |
| | | /** |
| | | * 判断是否需要过滤的对象。 |
| | | * |
| | | * |
| | | * @param o 对象信息。 |
| | | * @return 如果是需要过滤的对象,则返回true;否则返回false。 |
| | | */ |
| | |
| | | else if (Collection.class.isAssignableFrom(clazz)) |
| | | { |
| | | Collection collection = (Collection) o; |
| | | for (Iterator iter = collection.iterator(); iter.hasNext();) |
| | | { |
| | | return iter.next() instanceof MultipartFile; |
| | | } |
| | | for (Object value : collection) { |
| | | return value instanceof MultipartFile; |
| | | } |
| | | } |
| | | else if (Map.class.isAssignableFrom(clazz)) |
| | | { |
| | | Map map = (Map) o; |
| | | for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) |
| | | { |
| | | Map.Entry entry = (Map.Entry) iter.next(); |
| | | return entry.getValue() instanceof MultipartFile; |
| | | } |
| | | 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; |