Last active
November 9, 2018 15:34
-
-
Save daymien/acb146a0378273b41b83c75079a999e1 to your computer and use it in GitHub Desktop.
Re- Reable HttpServletRequest with HttpServletRequestWraper
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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