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) {
- }
- };
- }
- }
|