Skip to content

Instantly share code, notes, and snippets.

@daymien
Last active November 9, 2018 15:34
Show Gist options
  • Save daymien/acb146a0378273b41b83c75079a999e1 to your computer and use it in GitHub Desktop.
Save daymien/acb146a0378273b41b83c75079a999e1 to your computer and use it in GitHub Desktop.
Re- Reable HttpServletRequest with HttpServletRequestWraper
package de.retarus.edi.gate.filter;
import com.google.common.io.ByteStreams;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Allow us to consume a request multiple times.
* will be stored in byte array. So think about memory consumption.
*/
public class ResetHttpServletRequestWrapper extends HttpServletRequestWrapper {
private HttpServletRequest request;
private byte[] body;
public ResetHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public BufferedReader getReader() throws IOException {
if (body == null) {
body = ByteStreams.toByteArray(request.getInputStream());
}
InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(body));
return new BufferedReader(isr);
}
@Override
public ServletInputStream getInputStream() throws IOException {
if (body == null) {
body = ByteStreams.toByteArray(request.getInputStream());
}
ServletInputStream sis = new ServletInputStream() {
ByteArrayInputStream out = new ByteArrayInputStream(body);
@Override
public boolean isFinished() {
return out.available() == 0;
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setReadListener(final ReadListener readListener) {
throw new RuntimeException("Not implemented");
}
private int i;
@Override
public int read() throws IOException {
return out.read();
}
};
return sis;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment