package com.code2roc.fastface.filter; import com.code2roc.fastface.util.CommonUtil; import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; 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; import java.nio.charset.Charset; import java.util.Enumeration; import java.util.HashMap; public class RequestWrapper extends HttpServletRequestWrapper { private final byte[] body; private final HashMap headMap; private final HashMap requestParamMap; public RequestWrapper(HttpServletRequest request) throws IOException { super(request); body = CommonUtil.getBodyString(request).getBytes(Charset.forName("UTF-8")); headMap = new HashMap(); Enumeration headNameList = request.getHeaderNames(); while (headNameList.hasMoreElements()){ String key = headNameList.nextElement(); headMap.put(key.toLowerCase(),request.getHeader(key)); } requestParamMap = new HashMap<>(); Enumeration parameterNameList = request.getParameterNames(); while (parameterNameList.hasMoreElements()){ String key = parameterNameList.nextElement(); requestParamMap.put(key,request.getParameter(key)); } } @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) { } }; } @Override public String getHeader(String name) { return headMap.get(name.toLowerCase()); } @Override public String getParameter(String name) { return requestParamMap.get(name); } }