Skip to content

Instantly share code, notes, and snippets.

@Reizinixc
Last active December 17, 2019 04:48
Show Gist options
  • Save Reizinixc/5e749cda28a1ee3ca8a1a2f9faced23b to your computer and use it in GitHub Desktop.
Save Reizinixc/5e749cda28a1ee3ca8a1a2f9faced23b to your computer and use it in GitHub Desktop.
Cached POST body for HttpServletRequest. Inspired from http://natch3z.blogspot.com/2009/01/read-request-body-in-filter.html
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public final class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
private String body;
private final HttpServletRequest request;
public CachedBodyHttpServletRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(getBody().getBytes());
return new ServletInputStream() {
@Override
public int read() {
return byteArrayInputStream.read();
}
@Override
public boolean isFinished() {
return true;
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setReadListener(ReadListener readListener) {
// Nothing to set here.
}
};
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
private String getBody() throws IOException {
if (body == null) {
try (Scanner scanner = new Scanner(request.getInputStream(), request.getCharacterEncoding())) {
final String maybeBody = scanner.next("\\A");
body = maybeBody != null ? maybeBody : "";
}
}
return body;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment