|
|
@@ -0,0 +1,103 @@
|
|
|
+package com.zswl.dataservice.auth;
|
|
|
+
|
|
|
+import jakarta.servlet.ReadListener;
|
|
|
+import jakarta.servlet.ServletInputStream;
|
|
|
+import jakarta.servlet.http.HttpServletRequest;
|
|
|
+import jakarta.servlet.http.HttpServletRequestWrapper;
|
|
|
+import org.apache.poi.util.IOUtils;
|
|
|
+
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.ByteArrayInputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStreamReader;
|
|
|
+import java.util.logging.Logger;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author TRX
|
|
|
+ * @date 2024/9/15
|
|
|
+ */
|
|
|
+public class ApiSignRequestWrapper extends HttpServletRequestWrapper {
|
|
|
+
|
|
|
+ //请求体
|
|
|
+ private String requestBody;
|
|
|
+
|
|
|
+ //io流
|
|
|
+ private BufferedReader reader;
|
|
|
+
|
|
|
+ //io流
|
|
|
+ private ServletInputStream inputStream;
|
|
|
+
|
|
|
+ //日志
|
|
|
+ private Logger log = Logger.getLogger("ApiSignRequestWrapper");
|
|
|
+
|
|
|
+ public ApiSignRequestWrapper(HttpServletRequest request) throws IOException {
|
|
|
+ super(request);
|
|
|
+ setCharacterEncoding(request.getCharacterEncoding());
|
|
|
+ //读取请求体
|
|
|
+ requestBody = new String(IOUtils.toByteArray(request.getInputStream()), request.getCharacterEncoding());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取内容
|
|
|
+ */
|
|
|
+ public String getRequestBody() {
|
|
|
+ return requestBody;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 改变内容
|
|
|
+ */
|
|
|
+ public void setRequestBody(String requestBody) {
|
|
|
+ this.requestBody = requestBody;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ServletInputStream getInputStream() throws IOException {
|
|
|
+ if (inputStream == null) {
|
|
|
+ inputStream = new RequestCachingInputStream(requestBody.getBytes(getCharacterEncoding()));
|
|
|
+ }
|
|
|
+ return inputStream;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BufferedReader getReader() throws IOException {
|
|
|
+ if (reader == null) {
|
|
|
+ reader = new BufferedReader(new InputStreamReader(getInputStream(), getCharacterEncoding()));
|
|
|
+ }
|
|
|
+ return reader;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 缓存输入流
|
|
|
+ **/
|
|
|
+ private class RequestCachingInputStream extends ServletInputStream {
|
|
|
+
|
|
|
+ private ByteArrayInputStream inputStream;
|
|
|
+
|
|
|
+ public RequestCachingInputStream(byte[] bytes) {
|
|
|
+ inputStream = new ByteArrayInputStream(bytes);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int read() throws IOException {
|
|
|
+ return inputStream.read();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isFinished() {
|
|
|
+ return inputStream.available() == 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isReady() {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setReadListener(ReadListener readListener) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|