|
|
|
@ -4,12 +4,12 @@ import java.io.BufferedReader;
|
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
import java.nio.charset.Charset;
|
|
|
|
|
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.StringUtils;
|
|
|
|
|
import com.ruoyi.common.utils.http.HttpHelper;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 构建可重复读取inputStream的request
|
|
|
|
@ -20,10 +20,13 @@ public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
|
|
|
|
|
{
|
|
|
|
|
private final byte[] body;
|
|
|
|
|
|
|
|
|
|
public RepeatedlyRequestWrapper(HttpServletRequest request) throws IOException
|
|
|
|
|
public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
|
|
|
|
|
{
|
|
|
|
|
super(request);
|
|
|
|
|
body = readBytes(request.getReader(), "utf-8");
|
|
|
|
|
request.setCharacterEncoding("UTF-8");
|
|
|
|
|
response.setCharacterEncoding("UTF-8");
|
|
|
|
|
|
|
|
|
|
body = HttpHelper.getBodyString(request).getBytes("UTF-8");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -35,50 +38,35 @@ public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
|
|
|
|
|
@Override
|
|
|
|
|
public ServletInputStream getInputStream() throws IOException
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
|
|
|
|
|
|
|
|
|
|
return new ServletInputStream()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean isFinished()
|
|
|
|
|
public int read() throws IOException
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
return bais.read();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean isReady()
|
|
|
|
|
public boolean isFinished()
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void setReadListener(ReadListener listener)
|
|
|
|
|
public boolean isReady()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int read() throws IOException
|
|
|
|
|
public void setReadListener(ReadListener readListener)
|
|
|
|
|
{
|
|
|
|
|
return bais.read();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过BufferedReader和字符编码集转换成byte数组
|
|
|
|
|
*/
|
|
|
|
|
private byte[] readBytes(BufferedReader br, String encoding) throws IOException
|
|
|
|
|
{
|
|
|
|
|
String str = null, retStr = "";
|
|
|
|
|
while ((str = br.readLine()) != null)
|
|
|
|
|
{
|
|
|
|
|
retStr += str;
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isNotBlank(retStr))
|
|
|
|
|
{
|
|
|
|
|
return retStr.getBytes(Charset.forName(encoding));
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|