diff options
| author | wangwei <[email protected]> | 2022-11-04 15:26:24 +0800 |
|---|---|---|
| committer | wangwei <[email protected]> | 2022-11-04 15:56:26 +0800 |
| commit | 274c4672d104f23e8067ecff8bcdd5366a227d69 (patch) | |
| tree | 5cbb7a09980f570e0843d37e42299be726dc00d3 | |
| parent | 2bbd7d0b36c7da2430d87a3e4a8028f0f4e89693 (diff) | |
fix(Filter): 修复content-Type=multipart/form-data请求参数解析异常问题
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 |
