HttpServletRequest.getInputStream只能读取一次
问题描述 : 在开发一支API时因为需要在filter中取出request body中的内容进行加密,进行chain.doFilter(request, response);
之后的endpoint处理时 body中的内容为null
问题原因 : HttpServletRequest.getInputStream()只能读取一次,好似一杯水在filter里已经倒掉了,后面再用就没有了
解决办法 : 如下
1.覆写HttpServletRequestWrapper的getInputStream(),getReader().新建下如下类继承HttpServletRequestWrapper
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyRequestWrapper extends HttpServletRequestWrapper {
private final String body;
public MyRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
StringBuilder sb