Estoy trabajando en el código heredado y necesito hacer un parche.Modificar el cuerpo HttpServletRequest
El problema: una aplicación antigua envía malas solicitudes HTTP POST. Uno de los parámetros no tiene codificación URL. Sé que este parámetro siempre viene último y sé que es su nombre. Ahora estoy tratando de arreglarlo en el lado del servidor que se ejecuta dentro de Tomcat.
Este parámetro no es accesible a través del método getParameter estándar de HttpServletRequest, ya que está mal formado. El método simplemente devuelve null. Pero cuando leo manualmente todo el cuerpo de la solicitud a través de ServletInputStream, todos los otros parámetros desaparecen. Parece que las clases subyacentes no pueden analizar el contenido de ServletInputStream porque está agotado.
Hasta ahora he logrado hacer un envoltorio que lee todos los parámetros del cuerpo y anula todos los métodos de acceso a los parámetros. Pero si algún filtro en la cadena antes que el mío intentará acceder a cualquier parámetro, todo se romperá ya que ServletInputStream estará vacío.
¿Puedo de alguna manera evadir este problema? Puede ser que haya un enfoque diferente?
En resumen, si leeré el cuerpo de la solicitud sin procesar en el filtro, los parámetros desaparecerán de la solicitud. Si leo un solo parámetro, ServletInputStream se vaciará y el procesamiento manual será imposible. Además, es imposible leer el parámetro mal formado a través del método getParameter.
¿Podría proporcionar más detalles sobre el análisis de parámetros de solicitud manual? ¿No es suficiente anular getInputStream y getReader? –
Ok, lo busqué. Tuve que analizar muchos parámetros porque uno de ellos se dañó como se describe en una pregunta. Si están bien en su solicitud, no hay necesidad de hacer eso. – clorz
Consulte aquí para la implementación completa: http://stackoverflow.com/a/1048123/535203 –