BodyReaderHttpServletRequestWrapper#body优化

This commit is contained in:
xudawei 2024-05-16 16:56:07 +08:00
parent 49b49e1086
commit 377030333c

View File

@ -9,8 +9,10 @@ import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.Part; import javax.servlet.http.Part;
import java.io.BufferedInputStream;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@ -33,8 +35,7 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp
super(request); super(request);
this.request = request; this.request = request;
// request.getParameterMap(); // request.getParameterMap();
String sessionStream = getBodyString(request); body = getBodyBytes(request);
body = sessionStream.getBytes(Charset.forName("UTF-8"));
} }
@ -44,6 +45,20 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp
return request.getParts(); return request.getParts();
} }
private byte[] getBodyBytes(ServletRequest request) throws IOException {
try (BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) > 0) {
baos.write(buffer, 0, len);
}
return baos.toByteArray();
} catch (IOException ex) {
throw ex;
}
}
private String getBodyString(ServletRequest request) throws IOException { private String getBodyString(ServletRequest request) throws IOException {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
InputStream ins = request.getInputStream(); InputStream ins = request.getInputStream();