|
|
@ -4,12 +4,12 @@ import java.io.BufferedReader; |
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
import java.io.ByteArrayInputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStreamReader; |
|
|
|
import java.io.InputStreamReader; |
|
|
|
import java.nio.charset.Charset; |
|
|
|
|
|
|
|
import javax.servlet.ReadListener; |
|
|
|
import javax.servlet.ReadListener; |
|
|
|
import javax.servlet.ServletInputStream; |
|
|
|
import javax.servlet.ServletInputStream; |
|
|
|
|
|
|
|
import javax.servlet.ServletResponse; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletRequestWrapper; |
|
|
|
import javax.servlet.http.HttpServletRequestWrapper; |
|
|
|
import com.ruoyi.common.utils.StringUtils; |
|
|
|
import com.ruoyi.common.utils.http.HttpHelper; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 构建可重复读取inputStream的request |
|
|
|
* 构建可重复读取inputStream的request |
|
|
@ -20,10 +20,13 @@ public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper |
|
|
|
{ |
|
|
|
{ |
|
|
|
private final byte[] body; |
|
|
|
private final byte[] body; |
|
|
|
|
|
|
|
|
|
|
|
public RepeatedlyRequestWrapper(HttpServletRequest request) throws IOException |
|
|
|
public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException |
|
|
|
{ |
|
|
|
{ |
|
|
|
super(request); |
|
|
|
super(request); |
|
|
|
body = readBytes(request.getReader(), "utf-8"); |
|
|
|
request.setCharacterEncoding("UTF-8"); |
|
|
|
|
|
|
|
response.setCharacterEncoding("UTF-8"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
body = HttpHelper.getBodyString(request).getBytes("UTF-8"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
@ -35,50 +38,35 @@ public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public ServletInputStream getInputStream() throws IOException |
|
|
|
public ServletInputStream getInputStream() throws IOException |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
final ByteArrayInputStream bais = new ByteArrayInputStream(body); |
|
|
|
final ByteArrayInputStream bais = new ByteArrayInputStream(body); |
|
|
|
|
|
|
|
|
|
|
|
return new ServletInputStream() |
|
|
|
return new ServletInputStream() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean isFinished() |
|
|
|
public int read() throws IOException |
|
|
|
{ |
|
|
|
{ |
|
|
|
return false; |
|
|
|
return bais.read(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean isReady() |
|
|
|
public boolean isFinished() |
|
|
|
{ |
|
|
|
{ |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void setReadListener(ReadListener listener) |
|
|
|
public boolean isReady() |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@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; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|