文件上传缓存bugfix

This commit is contained in:
2024-05-19 20:50:32 +08:00
parent 5bb2adb425
commit 249dae6343
3 changed files with 26 additions and 2 deletions

View File

@@ -1,9 +1,11 @@
package cn.lihongjie.coal.filter;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import jakarta.servlet.http.Part;
import lombok.SneakyThrows;
@@ -11,6 +13,7 @@ import org.apache.commons.io.IOUtils;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Collection;
public class CacheBodyRequestWrapper extends HttpServletRequestWrapper {
@@ -35,6 +38,11 @@ public class CacheBodyRequestWrapper extends HttpServletRequestWrapper {
return inputStream;
}
@Override
public Collection<Part> getParts() throws IOException, ServletException {
return super.getParts();
}
public void reset() {
inputStream.reset();
}
@@ -75,5 +83,7 @@ public class CacheBodyRequestWrapper extends HttpServletRequestWrapper {
public int read() throws IOException {
return cache.read();
}
}
}

View File

@@ -9,7 +9,9 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.core.annotation.Order;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@@ -27,7 +29,18 @@ public class CacheFilter extends OncePerRequestFilter {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
long start = System.currentTimeMillis();
var req = new CacheBodyRequestWrapper(request);
HttpServletRequest req = request;
MediaType mediaType =
MediaType.parseMediaType(
ObjectUtils.defaultIfNull(
request.getContentType(),
MediaType.APPLICATION_OCTET_STREAM_VALUE));
// 文件上传不对body进行签名
if (!mediaType.isCompatibleWith(MediaType.MULTIPART_FORM_DATA)) {
req = new CacheBodyRequestWrapper(request);
}
filterChain.doFilter(req, response);
long end = System.currentTimeMillis();
response.setHeader(Constants.HTTP_HEADER_RESPONSE_TIME, String.valueOf(end - start));

View File

@@ -6,6 +6,7 @@ import jakarta.persistence.Entity;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.annotations.Comment;
@Data
@@ -35,7 +36,7 @@ public class SysConfigEntity extends CommonEntity {
switch (type) {
case "1":
if (!configVal.matches(regexValidator)) {
if (StringUtils.isNotEmpty(regexValidator) && !configVal.matches(regexValidator)) {
throw new RuntimeException("字符串不符合正则表达式");
}
break;