2015-01-14 20:05 GMT+01:00 Christopher Schultz <ch...@christopherschultz.net>: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA256 > > Jose, > > On 1/14/15 8:27 AM, Jose María Zaragoza wrote: >> 2015-01-14 12:46 GMT+01:00 André Warnier <a...@ice-sa.com>: >>> Jose María Zaragoza wrote: >>>> >>>> Hello: >>>> >>>> I would like to create a web filter to forward some requests >>>> to another webserver, >>>> >>>> The filter receives an "application/x-www-form-urlencoded" >>>> request , inspects the value of a parameter and chooses to >>>> forward to another remote webserver ( as a proxy ) >> >> >> Thanks >> >> I agree with you . I'll try to use an Apache httpd front-end >> >> Anyway, I've seen that if I execute >> >> Map<String, String[]> parameter = ((HttpServletRequest) >> request).getParameterMap(); >> >> , then request.getInputStream is empty >> >> >> But if I execute >> >> Map<String, String[]> parameter = ((HttpServletRequest) >> request).getParameterMap(); chain.doFilter(request, response); >> >> , the next filter in the chain receives the body ( as I expect it >> ) >> >> I don't understand this behaviour > > I think that might be a bug... calling > HttpServletRequest.getParameter* should cause the request entity to be > parsed, as long as the content type is > application/x-www-form-urlencoded. I think getParameterMap counts, but > I'd have to review the spec & javadoc (where some fun spec > requirements are hidden!). > > Anyhow, when you call HttpServletRequest.getParameter*, the container > *must* consume the request, according to the spec.
Thanks. In my case, all requests to be forwarded are POST requests ( and content type is application/x-www-form-urlencoded ) According to your reply, if I've got a chain of filters and the first one calls getParameterMap , do the next filters lose the content of the payload ? I tested to call several times to getParameterMap method on the same webfilter and it always returned the right values. Looks like getParameterMap doesn't consume() payload, but ... if I call getInputStream() after getParameterMap() , the stream is empty I'm using Tomcat 7.0.50 and I cannot understand the logic of this Regards If you want to > pull-in the request entity, you'll have to read it yourself using > HttpServletRequest.getInputStream / HttpServletRequest.getReader. That > means parsing it yourself, buffering it yourself, etc. You also get to > wrap the request and re-supply the buffered request to the local web > application should you choose to process it locally instead of proxy > it remotely. > > Also note that Tomcat supplies some response headers itself that > cannot be overridden, so you can't be a completely-transparent reverse > proxy. Keep that in mind if you decide to go down this road... > > - -chris > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1 > Comment: GPGTools - http://gpgtools.org > > iQIcBAEBCAAGBQJUtr3zAAoJEBzwKT+lPKRYDzkP/1XM5y72x41YBG56xgcvzsV6 > wQ1S5TLuEvzPGPBAR7sFWv+qCeZecIJ9WvkBTgaKiPm4Dn8rxLCvf34yaNTsHg7P > D0POXQrON36lZmUfg9utIySv4L0Y88MCFpdEkJr38ENTOK7bhAGsNK6kITeR2rXJ > z8XOOmMVgMYSGKqbUK3gbBKpifdr0fuSobcDPnJkOv751e63/jMzf0IBI2z3tQhe > xsXEd3JaCjguzOIXBCgbXaZUxEk3EgBjHm3xlHX1GEYSIwr/PHqyTtK4a82r25Ny > dhWbMsQc8hV018helpTVPj9ae0IUQXaDTsP+aXgXOwrzKXu1pLpMGeXjery54uwY > gJG32tMfNKLVikiq5xIKBHObzplei/jHjDn66w9Z0W3SZiGhtg9xDynpgqFPxKHY > iv/m5bwO0jPEUU7Yq99uu+jMwfJJDIWtWSKKrQ3IzmxJ6uNsiPhKX2jfTUn3wJ19 > 9q9ur/fER9nB9q4GAjUUVVe07Z4NH9ofPvXTKJExklpH64nCx99zmBYqXcLdsaxb > 2uGJcl6bu7sKWm0GzL7+kSnvFhOfkfM9mDoVgNbxKyJEHRcurA91PL2DguEOuUtV > g9pXrY+Sfd2siq2K1O1TX7wPOebNc/HFIWPux6rtGXB8/pc3XPhaM2UwlxpHfLzp > YyN10GOrc+HacHHbtwHs > =vczy > -----END PGP SIGNATURE----- > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org