content: package com.ruoyi.common.filter;
  
  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.ServletResponse;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletRequestWrapper;
  import com.ruoyi.common.utils.http.HttpHelper;
  import com.ruoyi.common.constant.Constants;
  
  /**
   * 构建可重复读取inputStream的request
   * 
   * @author ruoyi
   */
  public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
  {
      private final byte[] body;
  
      public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
      {
          super(request);
          request.setCharacterEncoding(Constants.UTF8);
          response.setCharacterEncoding(Constants.UTF8);
  
          body = HttpHelper.getBodyString(request).getBytes(Constants.UTF8);
      }
  
      @Override
      public BufferedReader getReader() throws IOException
      {
          return new BufferedReader(new InputStreamReader(getInputStream()));
      }
  
      @Override
      public ServletInputStream getInputStream() throws IOException
      {
          final ByteArrayInputStream bais = new ByteArrayInputStream(body);
          return new ServletInputStream()
          {
              @Override
              public int read() throws IOException
              {
                  return bais.read();
              }
  
              @Override
              public int available() throws IOException
              {
                  return body.length;
              }
  
              @Override
              public boolean isFinished()
              {
                  return false;
              }
  
              @Override
              public boolean isReady()
              {
                  return false;
              }
  
              @Override
              public void setReadListener(ReadListener readListener)
              {
  
              }
          };
      }
  }
  