Browse Source

日志记录问题修改

zouxuan 3 years ago
parent
commit
60cc397293

+ 101 - 17
mec-web/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java

@@ -1,33 +1,117 @@
 package com.ym.mec.web.interceptor;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.util.json.JsonUtil;
+import com.ym.mec.util.web.WebUtil;
+import com.yonge.log.dal.model.AuditLog;
+import com.yonge.log.model.AuditLogAnnotation;
+import com.yonge.log.service.AuditLogService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.yonge.log.interceptor.AuditLogInterceptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 @Component
-public class OperationLogInterceptor extends AuditLogInterceptor {
+public class OperationLogInterceptor extends HandlerInterceptorAdapter {
 
 	@Autowired
-	@Lazy
 	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private AuditLogService auditLogService;
+	@Value("${spring.application.name}")
+	private String clientName;
+	private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+	private static List<String> ignoreLogUrl;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+		syncSaveLog(request, handler);
+	}
+
+	public void syncSaveLog(HttpServletRequest request, Object handler) {
+		try {
+			SysUser sysUser = sysUserFeignService.queryUserInfo();
+			String username = "";
+			Integer userId = null;
+			if (sysUser != null && sysUser.getId() != null) {
+				username = sysUser.getRealName();
+				userId = sysUser.getId();
+			}
+			String servletPath = request.getServletPath();
+			HandlerMethod handlerMethod = (HandlerMethod) handler;
+			AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
+			ApiOperation apiOperation = handlerMethod.getMethodAnnotation(ApiOperation.class);
+			String operateName = null;
+			if (StringUtils.isEmpty(operateName) && apiOperation != null) {
+				operateName = apiOperation.value();
+			}
+			if (StringUtils.isEmpty(operateName) && anno != null) {
+				operateName = anno.operateName();
+			}
+			if (anno != null) {
+				saveLog(operateName, servletPath, request,username,userId);
+				return;
+			}
+			if (servletPath.contains("/task/") || servletPath.contains("/import/")) {
+				return;
+			}
+			String substring = servletPath.substring(servletPath.lastIndexOf("/") + 1).toLowerCase();
+			if (ignoreLogUrl == null) {
+				ignoreLogUrl = new ArrayList<>();
+				ignoreLogUrl.add("query");
+				ignoreLogUrl.add("get");
+				ignoreLogUrl.add("find");
+				ignoreLogUrl.add("list");
+				ignoreLogUrl.add("detail");
+				ignoreLogUrl.add("hasindexerrdata");
+				ignoreLogUrl.add("newindex");
+			}
+			for (String e : ignoreLogUrl) {
+				if (substring.contains(e)) {
+					return;
+				}
+			}
+			saveLog(operateName, servletPath, request,username,userId);
+		} catch (Exception e) {
+			e.printStackTrace();
 		}
-		return true;
 	}
 
+	private void saveLog(String operateName, String servletPath,
+						 HttpServletRequest request,String username,Integer userId) throws IOException {
+		AuditLog auditLog = new AuditLog();
+		auditLog.setOperateName(operateName);
+		auditLog.setInterfaceUrl(servletPath);
+		auditLog.setToken(request.getHeader("Authorization"));
+		auditLog.setService(clientName);
+		auditLog.setUserIp(WebUtil.getRemoteIp(request));
+
+		Map<String, Object> params = WebUtil.getParameterMap(request);
+		if (params == null || params.size() == 0) {
+			auditLog.setInputParams(IOUtils.toString(request.getInputStream(), Charset.defaultCharset()));
+		} else {
+			auditLog.setInputParams(JsonUtil.toJSONString(WebUtil.getParameterMap(request)));
+		}
+		// 操作人
+		auditLog.setUsername(username);
+		auditLog.setUserId(userId);
+		auditLog.setOperateTime(sdf.format(new Date()));
+		auditLogService.insert(auditLog);
+	}
 }