summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwangwei <[email protected]>2022-11-04 15:26:24 +0800
committerwangwei <[email protected]>2022-11-04 15:56:26 +0800
commit274c4672d104f23e8067ecff8bcdd5366a227d69 (patch)
tree5cbb7a09980f570e0843d37e42299be726dc00d3
parent2bbd7d0b36c7da2430d87a3e4a8028f0f4e89693 (diff)
fix(Filter): 修复content-Type=multipart/form-data请求参数解析异常问题
-rw-r--r--src/main/java/com/mesalab/common/configuration/MultipartResolverConfiguration.java32
-rw-r--r--src/main/java/com/mesalab/common/utils/HttpHelper.java12
-rw-r--r--src/main/java/com/mesalab/qgw/controller/ControllerFilter.java18
3 files changed, 53 insertions, 9 deletions
diff --git a/src/main/java/com/mesalab/common/configuration/MultipartResolverConfiguration.java b/src/main/java/com/mesalab/common/configuration/MultipartResolverConfiguration.java
new file mode 100644
index 00000000..eaaeda36
--- /dev/null
+++ b/src/main/java/com/mesalab/common/configuration/MultipartResolverConfiguration.java
@@ -0,0 +1,32 @@
+package com.mesalab.common.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.multipart.MultipartResolver;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * TODO
+ *
+ * @Classname MultipartResolverConfiguration
+ * @Date 2022/11/4 2:38 PM
+ * @Author wWei
+ */
+@Configuration
+public class MultipartResolverConfiguration {
+
+ @Value("${spring.servlet.multipart.max-request-size}")
+ private Integer maxSize;
+
+ @Bean("multipartResolver")
+ public MultipartResolver multipartResolver() {
+ CommonsMultipartResolver resolver = new CommonsMultipartResolver();
+ resolver.setDefaultEncoding(StandardCharsets.UTF_8.name());
+ resolver.setResolveLazily(true);
+ resolver.setMaxUploadSize(maxSize);
+ return resolver;
+ }
+}
diff --git a/src/main/java/com/mesalab/common/utils/HttpHelper.java b/src/main/java/com/mesalab/common/utils/HttpHelper.java
index 2863a5d9..5bad7cb9 100644
--- a/src/main/java/com/mesalab/common/utils/HttpHelper.java
+++ b/src/main/java/com/mesalab/common/utils/HttpHelper.java
@@ -29,13 +29,11 @@ public class HttpHelper {
InputStream inputStream = null;
BufferedReader reader = null;
try {
- if (StringUtils.equals(request.getMethod(),"POST")){
- inputStream = request.getInputStream();
- reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
- String line = "";
- while ((line = reader.readLine()) != null) {
- sb.append(line);
- }
+ inputStream = request.getInputStream();
+ reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
+ String line = "";
+ while ((line = reader.readLine()) != null) {
+ sb.append(line);
}
} catch (IOException e) {
log.error("IOException:{}", e.getMessage());
diff --git a/src/main/java/com/mesalab/qgw/controller/ControllerFilter.java b/src/main/java/com/mesalab/qgw/controller/ControllerFilter.java
index d4817f52..4e7e0f3e 100644
--- a/src/main/java/com/mesalab/qgw/controller/ControllerFilter.java
+++ b/src/main/java/com/mesalab/qgw/controller/ControllerFilter.java
@@ -1,6 +1,11 @@
package com.mesalab.qgw.controller;
+import org.apache.http.entity.ContentType;
import org.springframework.stereotype.Component;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.MultipartResolver;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
@@ -10,16 +15,25 @@ import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class ControllerFilter implements Filter {
+ private MultipartResolver multipartResolver = null;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
-
+ ServletContext servletContext = filterConfig.getServletContext();
+ WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
+ multipartResolver = (MultipartResolver) webApplicationContext.getBean("multipartResolver");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- filterChain.doFilter(new RequestParamWrapper((HttpServletRequest) servletRequest), servletResponse);
+ String contentType = servletRequest.getContentType();
+ if (contentType != null && contentType.contains(ContentType.MULTIPART_FORM_DATA.getMimeType())) {
+ MultipartHttpServletRequest multipartRequest = multipartResolver.resolveMultipart((HttpServletRequest) servletRequest);
+ filterChain.doFilter(multipartRequest, servletResponse);
+ } else {
+ filterChain.doFilter(new RequestParamWrapper((HttpServletRequest) servletRequest), servletResponse);
+ }
}
@Override