From 764d883b5ea3bdc06abbec548b6df0511e567978 Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Tue, 03 Sep 2024 09:46:05 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/binlog' into binlog
---
src/main/java/org/springblade/modules/system/service/impl/LogServiceImpl.java | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 101 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..40a13fd 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,88 @@
@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);
}
+ /**
+ * 清理时间范围外的日志记录信息
+ * @param param
+ * @return
+ */
+ @Override
+ public boolean removeLogs(String param) {
+ usualService.removeByTime();
+ apiService.removeByTime();
+ errorService.removeByTime();
+ return true;
+ }
+
+ /**
+ * 解析请求头
+ * @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