Browse Source

日志记录问题修改

zouxuan 3 years ago
parent
commit
b57b7917de

+ 9 - 12
cms/src/main/java/com/ym/mec/cms/interceptor/OperationLogInterceptor.java

@@ -1,18 +1,14 @@
 package com.ym.mec.cms.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.yonge.log.interceptor.AuditLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-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;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 9 - 13
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/interceptor/OperationLogInterceptor.java

@@ -1,19 +1,15 @@
 package com.ym.mec.auth.interceptor;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.service.SysUserService;
 import com.ym.mec.common.security.AuthUser;
 import com.ym.mec.common.security.SecurityUtils;
 import com.yonge.log.interceptor.AuditLogInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,16 +18,16 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserService sysUserService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		AuthUser authUser = SecurityUtils.getUser();
 		if (authUser != null) {
 			SysUser sysUser = sysUserService.get(authUser.getUserId());
-
 			if (sysUser != null) {
-				setUsername(sysUser.getRealName(), sysUser.getId(), sysUser.getTenantId() + "");
+				request.setAttribute("userId",sysUser.getId());
+				request.setAttribute("username",sysUser.getRealName());
 			}
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 16 - 55
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -10,23 +10,18 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
-import javax.servlet.ServletException;
 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;
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadPoolExecutor;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 日志审计的拦截器
@@ -39,53 +34,25 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
     @Value("${spring.application.name}")
     private String clientName;
 
-    private String username;
-
-    private Integer userId;
-    
-    private String tenantId;
-
     private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     private static List<String> ignoreLogUrl;
 
-    /**
-     * 异步线程池配置
-     */
-    @Bean("syncSaveLog")
-    public Executor asyncExecutor() {
-        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        // 设置核心线程数
-        executor.setCorePoolSize(10);
-        // 设置最大线程数
-        executor.setMaxPoolSize(100);
-        // 设置队列容量
-        executor.setQueueCapacity(1000);
-        // 设置线程活跃时间(秒)
-        executor.setKeepAliveSeconds(60);
-        // 设置默认线程名称
-        executor.setThreadNamePrefix("syncSaveLog-");
-        // 设置拒绝策略
-        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
-        // 等待所有任务结束后再关闭线程池
-        executor.setWaitForTasksToCompleteOnShutdown(true);
-        executor.initialize();
-        return executor;
-    }
-
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
-        return true;
-    }
-
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
-        syncSaveLog(request, handler);
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            syncSaveLog(request, handler);
+        },executor);
     }
 
     public void syncSaveLog(HttpServletRequest request, Object handler) {
         try {
+            Object userId = request.getAttribute("userId");
+            Object username = request.getAttribute("username");
+            Integer operator = Objects.isNull(userId)?Integer.parseInt(userId.toString()):null;
+            String name = Objects.isNull(username)?username.toString():null;
+
             String servletPath = request.getServletPath();
             HandlerMethod handlerMethod = (HandlerMethod) handler;
             AuditLogAnnotation anno = handlerMethod.getMethodAnnotation(AuditLogAnnotation.class);
@@ -98,7 +65,7 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
                 operateName = anno.operateName();
             }
             if (anno != null) {
-                saveLog(operateName, servletPath, request);
+                saveLog(operateName, servletPath, request,operator,name);
                 return;
             }
             if (servletPath.contains("/task/") || servletPath.contains("/import/")) {
@@ -120,13 +87,13 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
                     return;
                 }
             }
-            saveLog(operateName, servletPath, request);
+            saveLog(operateName, servletPath, request,operator,name);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    private void saveLog(String operateName, String servletPath, HttpServletRequest request) throws IOException {
+    private void saveLog(String operateName, String servletPath, HttpServletRequest request,Integer userId,String username) throws IOException {
         AuditLog auditLog = new AuditLog();
         auditLog.setOperateName(operateName);
         auditLog.setInterfaceUrl(servletPath);
@@ -146,10 +113,4 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
         auditLog.setOperateTime(sdf.format(new Date()));
         auditLogService.insert(auditLog);
     }
-
-    public void setUsername(String username, Integer userId, String tenantId) {
-        this.username = username;
-        this.userId = userId;
-        this.tenantId = tenantId;
-    }
 }

+ 4 - 5
mec-student/src/main/java/com/ym/mec/student/interceptor/OperationLogInterceptor.java

@@ -7,10 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -20,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 4 - 5
mec-teacher/src/main/java/com/ym/mec/teacher/interceptor/OperationLogInterceptor.java

@@ -7,10 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -20,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser != null && sysUser.getId() != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }

+ 9 - 97
mec-web/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java

@@ -2,116 +2,28 @@ package com.ym.mec.web.interceptor;
 
 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 com.yonge.log.interceptor.AuditLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 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 HandlerInterceptorAdapter {
+public class OperationLogInterceptor extends AuditLogInterceptor {
 
 	@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 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();
-		}
-	}
-
-	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)));
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser != null && sysUser.getId() != null) {
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		// 操作人
-		auditLog.setUsername(username);
-		auditLog.setUserId(userId);
-		auditLog.setOperateTime(sdf.format(new Date()));
-		auditLogService.insert(auditLog);
+		super.afterCompletion(request, response, handler, ex);
 	}
 }

+ 10 - 13
mec-websocket/src/main/java/com/ym/mec/web/interceptor/OperationLogInterceptor.java

@@ -1,18 +1,14 @@
 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.yonge.log.interceptor.AuditLogInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
-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;
 
 @Component
 public class OperationLogInterceptor extends AuditLogInterceptor {
@@ -22,12 +18,13 @@ public class OperationLogInterceptor extends AuditLogInterceptor {
 	private SysUserFeignService sysUserFeignService;
 
 	@Override
-	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser != null) {
-			setUsername(sysUser.getRealName(),sysUser.getId(), sysUser.getTenantId() + "");
+		if (sysUser != null && sysUser.getId() != null) {
+			request.setAttribute("userId",sysUser.getId());
+			request.setAttribute("username",sysUser.getRealName());
 		}
-		return true;
+		super.afterCompletion(request, response, handler, ex);
 	}
 
 }