Skip to content

Instantly share code, notes, and snippets.

@HydrangeaPurple
Created April 8, 2024 07:45
Show Gist options
  • Save HydrangeaPurple/e6726548f39ffac9fefda1e6e8c67c4c to your computer and use it in GitHub Desktop.
Save HydrangeaPurple/e6726548f39ffac9fefda1e6e8c67c4c to your computer and use it in GitHub Desktop.
[http请求流重复读问题, HttpServletRequestWrapper] #servlet #request #stream
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.springframework.util.StreamUtils;
public class RequestWrapper extends HttpServletRequestWrapper {
private byte[] requestBody;
public RequestWrapper(HttpServletRequest request) throws IOException {
super(request);
requestBody = StreamUtils.copyToByteArray(request.getInputStream());
}
@Override
public BufferedReader getReader() {
return new BufferedReader(new InputStreamReader(getInputStream(), StandardCharsets.UTF_8));
}
@Override
public ServletInputStream getInputStream() {
if (requestBody == null) {
requestBody = new byte[0];
}
final ByteArrayInputStream bais = new ByteArrayInputStream(requestBody);
return new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() throws IOException {
return bais.read();
}
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment