| | |
| | | package com.zy.asrs.wms.common.security; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.asrs.wms.utils.EncryptUtils; |
| | | import com.zy.asrs.wms.utils.WebkitParseUtils; |
| | | import javax.servlet.ReadListener; |
| | | import javax.servlet.ServletInputStream; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletRequestWrapper; |
| | | import java.io.*; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper { |
| | | private final byte[] cachedBody; |
| | | private final Map<String, String[]> parameterMap; |
| | | |
| | | public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException { |
| | | super(request); |
| | | String requestMethod = request.getMethod(); |
| | | if ("GET".equalsIgnoreCase(requestMethod)) { |
| | | Map<String, String[]> map = request.getParameterMap(); |
| | | String jsonString = JSON.toJSONString(map); |
| | | this.cachedBody = jsonString.getBytes(); |
| | | this.parameterMap = map; |
| | | }else { |
| | | // 读取请求体并缓存 |
| | | InputStream inputStream = request.getInputStream(); |
| | | // 方法来读取所有字节 |
| | | this.cachedBody = readBytesFromInputStream(inputStream); |
| | | |
| | | this.parameterMap = new HashMap<>(); |
| | | // 读取并解析表单数据 |
| | | parseRequestParameters(); |
| | | } |
| | | } |
| | | |
| | | private byte[] readBytesFromInputStream(InputStream inputStream) throws IOException { |
| | | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
| | | byte[] buffer = new byte[1024]; |
| | | int bytesRead; |
| | | while ((bytesRead = inputStream.read(buffer)) != -1) { |
| | | byteArrayOutputStream.write(buffer, 0, bytesRead); |
| | | } |
| | | return byteArrayOutputStream.toByteArray(); |
| | | } |
| | | |
| | | @Override |
| | | public ServletInputStream getInputStream() { |
| | | return new CachedBodyServletInputStream(cachedBody); |
| | | } |
| | | |
| | | @Override |
| | | public BufferedReader getReader() { |
| | | return new BufferedReader(new InputStreamReader(getInputStream())); |
| | | } |
| | | |
| | | @Override |
| | | public String getParameter(String name) { |
| | | String[] values = parameterMap.get(name); |
| | | return (values != null && values.length > 0) ? values[0] : null; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, String[]> getParameterMap() { |
| | | return parameterMap; |
| | | } |
| | | |
| | | @Override |
| | | public String[] getParameterValues(String name) { |
| | | return parameterMap.get(name); |
| | | } |
| | | |
| | | private static class CachedBodyServletInputStream extends ServletInputStream { |
| | | private final ByteArrayInputStream inputStream; |
| | | |
| | | public CachedBodyServletInputStream(byte[] cachedBody) { |
| | | this.inputStream = new ByteArrayInputStream(cachedBody); |
| | | } |
| | | |
| | | @Override |
| | | public boolean isFinished() { |
| | | return inputStream.available() == 0; |
| | | } |
| | | |
| | | @Override |
| | | public boolean isReady() { |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | public void setReadListener(ReadListener listener) { |
| | | throw new UnsupportedOperationException(); |
| | | } |
| | | |
| | | @Override |
| | | public int read() { |
| | | return inputStream.read(); |
| | | } |
| | | } |
| | | |
| | | private void parseRequestParameters() { |
| | | String string = new String(cachedBody); |
| | | HashMap<String, Object> formData = WebkitParseUtils.getFormData(string); |
| | | for (Map.Entry<String, Object> entry : formData.entrySet()) { |
| | | parameterMap.put(entry.getKey(), new String[]{entry.getValue().toString()}); |
| | | } |
| | | } |
| | | } |
| | | |
| | | package com.zy.asrs.wms.common.security;
|
| | |
|
| | | import com.alibaba.fastjson.JSON;
|
| | | import com.zy.asrs.wms.utils.EncryptUtils;
|
| | | import com.zy.asrs.wms.utils.WebkitParseUtils;
|
| | | import javax.servlet.ReadListener;
|
| | | import javax.servlet.ServletInputStream;
|
| | | import javax.servlet.http.HttpServletRequest;
|
| | | import javax.servlet.http.HttpServletRequestWrapper;
|
| | | import java.io.*;
|
| | | import java.util.HashMap;
|
| | | import java.util.Map;
|
| | |
|
| | | public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
|
| | | private final byte[] cachedBody;
|
| | | private final Map<String, String[]> parameterMap;
|
| | |
|
| | | public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException {
|
| | | super(request);
|
| | | String requestMethod = request.getMethod();
|
| | | if ("GET".equalsIgnoreCase(requestMethod)) {
|
| | | Map<String, String[]> map = request.getParameterMap();
|
| | | String jsonString = JSON.toJSONString(map);
|
| | | this.cachedBody = jsonString.getBytes();
|
| | | this.parameterMap = map;
|
| | | }else {
|
| | | // 读取请求体并缓存
|
| | | InputStream inputStream = request.getInputStream();
|
| | | // 方法来读取所有字节
|
| | | this.cachedBody = readBytesFromInputStream(inputStream);
|
| | |
|
| | | this.parameterMap = new HashMap<>();
|
| | | // 读取并解析表单数据
|
| | | parseRequestParameters();
|
| | | }
|
| | | }
|
| | |
|
| | | private byte[] readBytesFromInputStream(InputStream inputStream) throws IOException {
|
| | | ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
| | | byte[] buffer = new byte[1024];
|
| | | int bytesRead;
|
| | | while ((bytesRead = inputStream.read(buffer)) != -1) {
|
| | | byteArrayOutputStream.write(buffer, 0, bytesRead);
|
| | | }
|
| | | return byteArrayOutputStream.toByteArray();
|
| | | }
|
| | |
|
| | | @Override
|
| | | public ServletInputStream getInputStream() {
|
| | | return new CachedBodyServletInputStream(cachedBody);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public BufferedReader getReader() {
|
| | | return new BufferedReader(new InputStreamReader(getInputStream()));
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String getParameter(String name) {
|
| | | String[] values = parameterMap.get(name);
|
| | | return (values != null && values.length > 0) ? values[0] : null;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public Map<String, String[]> getParameterMap() {
|
| | | return parameterMap;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public String[] getParameterValues(String name) {
|
| | | return parameterMap.get(name);
|
| | | }
|
| | |
|
| | | private static class CachedBodyServletInputStream extends ServletInputStream {
|
| | | private final ByteArrayInputStream inputStream;
|
| | |
|
| | | public CachedBodyServletInputStream(byte[] cachedBody) {
|
| | | this.inputStream = new ByteArrayInputStream(cachedBody);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean isFinished() {
|
| | | return inputStream.available() == 0;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean isReady() {
|
| | | return true;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void setReadListener(ReadListener listener) {
|
| | | throw new UnsupportedOperationException();
|
| | | }
|
| | |
|
| | | @Override
|
| | | public int read() {
|
| | | return inputStream.read();
|
| | | }
|
| | | }
|
| | |
|
| | | private void parseRequestParameters() {
|
| | | String string = new String(cachedBody);
|
| | | HashMap<String, Object> formData = WebkitParseUtils.getFormData(string);
|
| | | for (Map.Entry<String, Object> entry : formData.entrySet()) {
|
| | | parameterMap.put(entry.getKey(), new String[]{entry.getValue().toString()});
|
| | | }
|
| | | }
|
| | | }
|
| | |
|