package com.ruoyi.common.filter; 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; public class CustomRequestWrapper extends HttpServletRequestWrapper { private final String body; /** * 构造函数,用于创建自定义请求包装器。 * * @param request 原始 HTTP 请求对象 * @param body 新的请求体内容 * @throws IOException 如果读取或处理请求体时发生错误 */ public CustomRequestWrapper(HttpServletRequest request, String body) throws IOException { super(request); this.body = body; } /** * 重写 getInputStream 方法,返回一个新的 ServletInputStream, * 其中包含修改后的请求体内容。 * * @return 包含修改后请求体内容的 ServletInputStream * @throws IOException 如果读取输入流时发生错误 */ @Override public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes()); 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() throws IOException { // 从字节数组输入流中读取下一个字节 return byteArrayInputStream.read(); } }; } /** * 重写 getReader 方法,返回一个新的 BufferedReader, * 其中包含修改后的请求体内容。 * * @return 包含修改后请求体内容的 BufferedReader * @throws IOException 如果读取输入流时发生错误 */ @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(this.getInputStream())); } }