Browse Source

Merge remote-tracking branch 'origin/master'

jonbo 1 year ago
parent
commit
c1234aad23

+ 31 - 0
collect-fees/collect-fees-service/src/main/java/com/tofly/fees/common/annotate/repeatableHttpServletRequest/FilterRegistrationConfiguration.java

@@ -0,0 +1,31 @@
+package com.tofly.fees.common.annotate.repeatableHttpServletRequest;
+
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.Filter;
+
+/**
+ * @description:
+ * @Title: FilterRegistrationConfiguration
+ * @Package com.tofly.fees.common.annotate
+ * @Date 2023-06-27 13:36
+ */
+@Configuration
+public class FilterRegistrationConfiguration {
+    @Bean
+    public FilterRegistrationBean someFilterRegistration() {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setFilter(repeatableFilter());
+        registration.addUrlPatterns("/*");
+        registration.setName("repeatableFilter");
+        registration.setOrder(1);
+        return registration;
+    }
+
+    @Bean
+    public Filter repeatableFilter() {
+        return new RepeatableFilter();
+    }
+}

+ 47 - 0
collect-fees/collect-fees-service/src/main/java/com/tofly/fees/common/annotate/repeatableHttpServletRequest/RepeatableFilter.java

@@ -0,0 +1,47 @@
+package com.tofly.fees.common.annotate.repeatableHttpServletRequest;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @description:
+ * @Title: RepeatableFilter
+ * @Package com.tofly.fees.common.annotate
+ * @Author 芝士汉堡
+ * @Date 2023-06-27 13:35
+ */
+public class RepeatableFilter implements Filter {
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+
+
+        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+        String contentType = httpServletRequest.getContentType();
+        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
+        //判断请求类型
+        if (contentType == null) {
+            //表单请求
+            filterChain.doFilter(servletRequest, servletResponse);
+            return;
+        } else if (contentType.startsWith("multipart/")) {
+            //文件上传类型
+            filterChain.doFilter(servletRequest, servletResponse);
+            return;
+        }else if(contentType.startsWith("application/json")){
+
+            HttpServletRequest httpServletRequestInfo =null;
+            if (servletRequest instanceof HttpServletRequest) {
+                httpServletRequestInfo=new RepeatableHttpServletRequest((HttpServletRequest)servletRequest);
+            }
+            if (null == httpServletRequestInfo) {
+                filterChain.doFilter(servletRequest, servletResponse);
+            } else {
+                filterChain.doFilter(httpServletRequestInfo,httpServletResponse);
+            }
+        }
+
+
+    }
+}

+ 96 - 0
collect-fees/collect-fees-service/src/main/java/com/tofly/fees/common/annotate/repeatableHttpServletRequest/RepeatableHttpServletRequest.java

@@ -0,0 +1,96 @@
+package com.tofly.fees.common.annotate.repeatableHttpServletRequest;
+
+import org.apache.commons.io.IOUtils;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletException;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @description:
+ * @Title: RepeatableHttpServletRequest
+ * @Package com.tofly.fees.common.annotate
+ * @Author 芝士汉堡
+ * @Date 2023-06-27 12:00
+ */
+public class RepeatableHttpServletRequest  extends HttpServletRequestWrapper {
+    private final byte[] bytes;
+    private static final int BUFFER_SIZE = 4096;
+    public RepeatableHttpServletRequest(HttpServletRequest request) throws IOException, ServletException {
+        super(request);
+        bytes= IOUtils.toByteArray(request.getInputStream());
+    }
+
+
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+        return new ServletInputStream() {
+            private int lastIndexRetrieved = -1;
+            private ReadListener readListener = null;
+            @Override
+            public boolean isFinished() {
+                return (lastIndexRetrieved == bytes.length-1);
+            }
+            @Override
+            public boolean isReady() {
+                // This implementation will never block
+                // We also never need to call the readListener from this method, as this method will never return false
+                return isFinished();
+            }
+            @Override
+            public void setReadListener(ReadListener readListener) {
+                this.readListener = readListener;
+                if (!isFinished()) {
+                    try {
+                        readListener.onDataAvailable();
+                    } catch (IOException e) {
+                        readListener.onError(e);
+                    }
+                } else {
+                    try {
+                        readListener.onAllDataRead();
+                    } catch (IOException e) {
+                        readListener.onError(e);
+                    }
+                }
+            }
+            @Override
+            public int read() throws IOException {
+                int i;
+                if (!isFinished()) {
+                    i = bytes[lastIndexRetrieved+1];
+                    lastIndexRetrieved++;
+                    if (isFinished() && (readListener != null)) {
+                        try {
+                            readListener.onAllDataRead();
+                        } catch (IOException ex) {
+                            readListener.onError(ex);
+                            throw ex;
+                        }
+                    }
+                    return i;
+                } else {
+                    return -1;
+                }
+            }
+        };
+    }
+    @Override
+    public BufferedReader getReader() throws IOException {
+        ByteArrayInputStream is = new ByteArrayInputStream(bytes);
+        BufferedReader temp = new BufferedReader(new InputStreamReader(is));
+        return temp;
+    }
+
+}