From 19135908721264e4027d2b262a33b0fc1ee41da2 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Fri, 29 Mar 2024 18:24:03 +0800
Subject: [PATCH] 日志接口数据设置查询修改

---
 src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java |   91 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 89 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
index 9c363fd..fb965f0 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java
@@ -4,11 +4,22 @@
 import org.springblade.core.log.model.LogApi;
 import org.springblade.core.log.model.LogError;
 import org.springblade.core.log.model.LogUsual;
+import org.springblade.core.secure.exception.SecureException;
+import org.springblade.core.tool.utils.Charsets;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.modules.system.service.ILogApiService;
 import org.springblade.modules.system.service.ILogErrorService;
 import org.springblade.modules.system.service.ILogService;
 import org.springblade.modules.system.service.ILogUsualService;
+import org.springblade.modules.system.entity.LogApiExt;
 import org.springframework.stereotype.Service;
+
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+import java.util.Objects;
 
 /**
  * Created by Blade.
@@ -17,7 +28,19 @@
  */
 @Service
 @AllArgsConstructor
-public class LogServiceImpl implements ILogService {
+public class LogServiceImpl implements ILogService, ServletRequestListener {
+
+	private HttpServletRequest request = null;
+
+	@Override
+	public void requestInitialized(ServletRequestEvent sre) {
+		request = (HttpServletRequest) sre.getServletRequest();
+	}
+
+	@Override
+	public void requestDestroyed(ServletRequestEvent sre) {
+
+	}
 
 	private final ILogUsualService usualService;
 	private final ILogApiService apiService;
@@ -30,12 +53,76 @@
 
 	@Override
 	public Boolean saveApiLog(LogApi log) {
-		return apiService.save(log);
+		LogApiExt api = new LogApiExt();
+		try {
+			String[] tokens = extractAndDecodeHeader();
+			api.setApplicationId(tokens[0]);
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		api.setTitle(log.getTitle());
+		api.setTime(log.getTime());
+		api.setTenantId(log.getTenantId());
+		api.setServiceId(log.getServiceId());
+		api.setServerIp(log.getServerIp());
+		api.setEnv(log.getEnv());
+		api.setServerHost(log.getServerHost());
+		api.setRemoteIp(log.getRemoteIp());
+		api.setRequestUri(log.getRequestUri());
+		api.setUserAgent(log.getUserAgent());
+		api.setMethod(log.getMethod());
+		api.setMethodName(log.getMethodName());
+		api.setMethodClass(log.getMethodClass());
+		api.setCreateTime(log.getCreateTime());
+		api.setCreateBy(log.getCreateBy());
+		if (log.getRequestUri().equals("/blade-auth/oauth/token")){
+			api.setType("1");
+		}else {
+			api.setType("2");
+		}
+		// 保存
+		return apiService.save(api);
 	}
+
+
 
 	@Override
 	public Boolean saveErrorLog(LogError log) {
 		return errorService.save(log);
 	}
 
+
+	/**
+	 * 解析请求头
+	 * @return
+	 */
+	public String[] extractAndDecodeHeader() throws UnsupportedEncodingException {
+		try {
+			String header = ((HttpServletRequest) Objects.requireNonNull(request)).getHeader("Authorization");
+			header = Func.toStr(header).replace("Basic%20", "Basic ");
+			if (!header.startsWith("Basic ")) {
+				throw new SecureException("未获取到请求头[Authorization]的信息");
+			} else {
+				byte[] base64Token = header.substring(6).getBytes(Charsets.UTF_8_NAME);
+
+				byte[] decoded;
+				try {
+					decoded = Base64.getDecoder().decode(base64Token);
+				} catch (IllegalArgumentException var5) {
+					throw new RuntimeException("客户端令牌解析失败");
+				}
+
+				String token = new String(decoded, Charsets.UTF_8_NAME);
+				int index = token.indexOf(":");
+				if (index == -1) {
+					throw new RuntimeException("客户端令牌不合法");
+				} else {
+					return new String[]{token.substring(0, index), token.substring(index + 1)};
+				}
+			}
+		} catch (Throwable var6) {
+			throw var6;
+		}
+	}
+
 }

--
Gitblit v1.9.3