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