From d84aa7589c181a266d9bca01432a74f53ec83d88 Mon Sep 17 00:00:00 2001
From: whycq <10027870+whycq@user.noreply.gitee.com>
Date: 星期一, 27 五月 2024 13:45:49 +0800
Subject: [PATCH] # 操作日志

---
 src/main/java/com/zy/common/config/AdminInterceptor.java               |    8 +++
 src/main/java/com/zy/common/utils/CustomHttpServletRequestWrapper.java |   48 ++++++++++++++++++++++++
 src/main/java/com/zy/common/config/CustomRequestFilter.java            |   20 ++++++++++
 3 files changed, 75 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/common/config/AdminInterceptor.java b/src/main/java/com/zy/common/config/AdminInterceptor.java
index fed375e..8fc8783 100644
--- a/src/main/java/com/zy/common/config/AdminInterceptor.java
+++ b/src/main/java/com/zy/common/config/AdminInterceptor.java
@@ -14,13 +14,16 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Component;
+import org.springframework.util.StreamUtils;
 import org.springframework.web.method.HandlerMethod;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
+import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.lang.reflect.Method;
+import java.nio.charset.Charset;
 import java.util.Date;
 
 /**
@@ -137,12 +140,15 @@
                     Http.response(response, BaseRes.NO_ACTIVATION);
                     return false;
                 }
+                ServletInputStream inputStream = request.getInputStream();
+                String bodyParam = StreamUtils.copyToString(inputStream, Charset.defaultCharset());
+
                 // 璁板綍鎿嶄綔鏃ュ織
                 OperateLog operateLog = new OperateLog();
                 operateLog.setAction(Cools.isEmpty(memo)?request.getRequestURI():memo);
                 operateLog.setIp(request.getRemoteAddr());
                 operateLog.setUserId(user.getId());
-                operateLog.setRequest(JSON.toJSONString(request.getParameterMap()));
+                operateLog.setRequest(JSON.toJSONString(bodyParam));
                 request.setAttribute("operateLog", operateLog);
             }
             return true;
diff --git a/src/main/java/com/zy/common/config/CustomRequestFilter.java b/src/main/java/com/zy/common/config/CustomRequestFilter.java
new file mode 100644
index 0000000..2820040
--- /dev/null
+++ b/src/main/java/com/zy/common/config/CustomRequestFilter.java
@@ -0,0 +1,20 @@
+package com.zy.common.config;
+
+import com.zy.common.utils.CustomHttpServletRequestWrapper;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+@Component
+public class CustomRequestFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+        CustomHttpServletRequestWrapper requestWrapper = new CustomHttpServletRequestWrapper(httpServletRequest);
+        chain.doFilter(requestWrapper, response);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/common/utils/CustomHttpServletRequestWrapper.java b/src/main/java/com/zy/common/utils/CustomHttpServletRequestWrapper.java
new file mode 100644
index 0000000..3a2ff1a
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/CustomHttpServletRequestWrapper.java
@@ -0,0 +1,48 @@
+package com.zy.common.utils;
+
+import org.springframework.util.StreamUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+
+public class CustomHttpServletRequestWrapper extends HttpServletRequestWrapper {
+    private final byte[] bytes;
+
+    public CustomHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
+        super(request);
+        bytes = StreamUtils.copyToByteArray(request.getInputStream());
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
+        return new ServletInputStream() {
+            @Override
+            public boolean isFinished() {
+                return false;
+            }
+
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener) {
+            }
+
+            @Override
+            public int read() throws IOException {
+                return byteArrayInputStream.read();
+            }
+        };
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.1