| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | package org.jeecg.config.sign.util;import javax.servlet.ReadListener;import javax.servlet.ServletInputStream;import javax.servlet.ServletRequest;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import java.io.*;import java.nio.charset.Charset;/** * 保存过滤器里面的流 *  * @author jeecg * @date 20210621 */public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {    private final byte[] body;    public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) {        super(request);        String sessionStream = getBodyString(request);        body = sessionStream.getBytes(Charset.forName("UTF-8"));    }    /**     * 获取请求Body     *     * @param request     * @return     */    public String getBodyString(final ServletRequest request) {        StringBuilder sb = new StringBuilder();        try (InputStream inputStream = cloneInputStream(request.getInputStream());            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")))) {            String line;            while ((line = reader.readLine()) != null) {                sb.append(line);            }        } catch (IOException e) {            e.printStackTrace();        }        return sb.toString();    }    /**     * Description: 复制输入流</br>     *     * @param inputStream     * @return</br>     */    public InputStream cloneInputStream(ServletInputStream inputStream) {        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];        int len;        try {            while ((len = inputStream.read(buffer)) > -1) {                byteArrayOutputStream.write(buffer, 0, len);            }            byteArrayOutputStream.flush();        } catch (IOException e) {            e.printStackTrace();        }        return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());    }    @Override    public BufferedReader getReader() {        return new BufferedReader(new InputStreamReader(getInputStream()));    }    @Override    public ServletInputStream getInputStream() {        final ByteArrayInputStream bais = new ByteArrayInputStream(body);        return new ServletInputStream() {            @Override            public int read() {                return bais.read();            }            @Override            public boolean isFinished() {                return false;            }            @Override            public boolean isReady() {                return false;            }            @Override            public void setReadListener(ReadListener readListener) {            }        };    }}
 |