Created
April 8, 2024 07:45
-
-
Save HydrangeaPurple/e6726548f39ffac9fefda1e6e8c67c4c to your computer and use it in GitHub Desktop.
[http请求流重复读问题, HttpServletRequestWrapper] #servlet #request #stream
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
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