修改 HttpServletRequest body
我正在研究遗留代码,需要制作一个补丁。
问题是:一个古老的应用程序发送了错误的HTTP POST请求。其中一个参数未进行 URL 编码。我知道这个参数总是排在最后,我知道它的名字。我现在正试图在tomcat内部运行的服务器端修复它。
此参数无法通过 HttpServletRequest 的标准 getParameter 方法访问,因为它的格式不正确。方法仅返回 null。但是当我通过ServletInputStream手动读取整个请求正文时,所有其他参数都消失了。看起来底层类无法解析ServletInputStream的内容,因为它已经耗尽了。
到目前为止,我已经设法制作了一个包装器,它从body读取所有参数并覆盖所有参数访问方法。但是,如果在我的链中的任何过滤器尝试访问任何参数,那么一切都会中断,因为ServletInputStream将是空的。
我能以某种方式回避这个问题吗?可能有不同的方法?
总而言之,如果我在筛选器中读取原始请求正文,参数将从请求中消失。如果我读取单个参数,ServletInputStream将变为空,手动处理将是不可能的。此外,通过 getParameter 方法读取格式错误的参数是不可能的。