@ -4,12 +4,12 @@ import java.io.BufferedReader;
@@ -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
@@ -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
@@ -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 isFinishe d( )
public int rea d( ) 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 ;
} ;
}
}