该方法只能通过filter的方式向下传,目前不清楚怎么使用interceptor处理
String requestParamJson = readAsChars(req);
// 重新封装request
CustomHttpWrapper wrapper = new CustomHttpWrapper(req, requestParamJson);
chain.doFilter(wrapper, res);
// 重写 HttpServletRequest 的方法
public class CustomHttpWrapper extends HttpServletRequestWrapper {
private final String paramJson;
public DecryptHttpWrapper(HttpServletRequest request, String json) {
super(request);
this.paramJson = json;
}
public String getContentType() {
return contentType == null ? getRequest().getContentType(): contentType;
}
public ServletInputStream getInputStream() throws IOException {
ByteArrayInputStream inputStream = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
return new ServletInputStream() {
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
@Override
public int read() {
return inputStream.read();
}
};
}
public BufferedReader getReader() {
return IOUtils.toBufferedReader(new StringReader(this.paramJson));
}
public int getContentLength() {
return paramJson.length();
}
}
// 获取request里的请求数据
public static String readAsChars(HttpServletRequest request) {
String contentType = request.getContentType();
if (StringUtils.isNotBlank(contentType) && contentType.toLowerCase().contains("application/json")) {
// if ("application/json".equals(request.getContentType())) {
// BufferedReader streamReader = request.getReader();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
responseStrBuilder.append(inputStr);
return responseStrBuilder.toString();
} else {
return JsonUtil.toJson(request.getParameterMap());
}
}