You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.8 KiB
72 lines
1.8 KiB
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; |
|
|
|
/** |
|
* 构建可重复读取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("UTF-8"); |
|
response.setCharacterEncoding("UTF-8"); |
|
|
|
body = HttpHelper.getBodyString(request).getBytes("UTF-8"); |
|
} |
|
|
|
@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 boolean isFinished() |
|
{ |
|
return false; |
|
} |
|
|
|
@Override |
|
public boolean isReady() |
|
{ |
|
return false; |
|
} |
|
|
|
@Override |
|
public void setReadListener(ReadListener readListener) |
|
{ |
|
|
|
} |
|
}; |
|
} |
|
}
|
|
|