| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package cn.com.goldenwater.dcproj.filter;
- 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.StandardCharsets;
- public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
- /**
- * Constructs a request object wrapping the given request.
- *
- * @param request
- * @throws IllegalArgumentException if the request is null
- */
- private final byte[] body;
- public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) {
- super(request);
- synchronized (this) {
- String sessionStream = getBodyString(request);
- body = sessionStream.getBytes(StandardCharsets.UTF_8);
- }
- }
- public String getBodyString(final ServletRequest request) {
- StringBuilder sb = new StringBuilder();
- InputStream inputStream = null;
- BufferedReader reader = null;
- try {
- inputStream = cloneInputStream(request.getInputStream());
- reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
- String line = "";
- while ((line = reader.readLine()) != null) {
- sb.append(line);
- }
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- finally {
- if (inputStream != null) {
- try {
- inputStream.close();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (reader != null) {
- try {
- reader.close();
- }
- 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();
- }
- InputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
- return byteArrayInputStream;
- }
- @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) {
- }
- };
- }
- }
|