|
|
|
@ -1,30 +1,44 @@
|
|
|
|
|
package cc.yunxi.filter;
|
|
|
|
|
|
|
|
|
|
import org.springframework.util.StreamUtils;
|
|
|
|
|
import cn.hutool.core.io.IoUtil;
|
|
|
|
|
import cn.hutool.http.HttpUtil;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ReadListener;
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.ServletInputStream;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletRequestWrapper;
|
|
|
|
|
import javax.servlet.http.Part;
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 解决拦截器读取Request流信息后,
|
|
|
|
|
* @RequestBody再次读取时Request流自动关闭导致数据丢失问题
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class RequestReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
|
|
|
|
|
private byte[] requestBody = null;
|
|
|
|
|
private byte[] requestBody;
|
|
|
|
|
|
|
|
|
|
public RequestReaderHttpServletRequestWrapper (HttpServletRequest request) {
|
|
|
|
|
private Collection<Part> requestParts;
|
|
|
|
|
|
|
|
|
|
public RequestReaderHttpServletRequestWrapper(HttpServletRequest request) {
|
|
|
|
|
super(request);
|
|
|
|
|
//缓存请求body
|
|
|
|
|
//缓存请求body或parts
|
|
|
|
|
try {
|
|
|
|
|
requestBody = StreamUtils.copyToByteArray(request.getInputStream());
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
if(ServletFileUpload.isMultipartContent(request)) {
|
|
|
|
|
requestParts = request.getParts();
|
|
|
|
|
} else { // application/x-www-form-urlencoded、json
|
|
|
|
|
requestBody = IoUtil.readBytes(request.getInputStream());
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("requestWrapper error", e);
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -67,4 +81,12 @@ public class RequestReaderHttpServletRequestWrapper extends HttpServletRequestWr
|
|
|
|
|
public BufferedReader getReader() throws IOException {
|
|
|
|
|
return new BufferedReader(new InputStreamReader(getInputStream()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写 getParts()
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Collection<Part> getParts() {
|
|
|
|
|
return requestParts;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|