package com.dl.common.filter;
|
|
import cn.hutool.core.io.IoUtil;
|
import com.dl.common.constant.Constants;
|
|
import javax.servlet.ReadListener;
|
import javax.servlet.ServletInputStream;
|
import javax.servlet.ServletResponse;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequestWrapper;
|
import java.io.BufferedReader;
|
import java.io.ByteArrayInputStream;
|
import java.io.IOException;
|
import java.io.InputStreamReader;
|
|
/**
|
* 构建可重复读取inputStream的request
|
*
|
* @author dl
|
*/
|
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 = IoUtil.readBytes(request.getInputStream(), false);
|
}
|
|
@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) {
|
|
}
|
};
|
}
|
}
|