Would you mind elaborating your answer? I just want,
in org.apache.catalina.connector.Request, readPostBody() method to access
the request stream via getInputStream() rather than getStream(). Maybe I am
missing something but this looks legit to me.

On Thu, Sep 21, 2017 at 11:13 PM, Mark Thomas <ma...@apache.org> wrote:

> On 21/09/17 21:58, Volkan Yazıcı wrote:
> > Hey Igal,
> >
> > Today, I've tried to implement your proposal (consuming the InputStream
> > eagerly, wrapping the consumed byte[] as a re-consumable
> > ServletInputStream, and passing it to next filter) and hit by the same
> > Tomcat shortcoming: Since you've already consumed the original
> InputStream,
> > later on, any access to parameters will
> > trigger o.a.c.connector.Request#readPostBody() which in return will
> access
> > the original InputStream via o.a.c.connector.Request#getStream()
> discarding
> > the re-consumable you provided by overriding
> > javax.servlet.ServletRequest#getInputStream().
> > Long story short, consuming InputStream eagerly breaks the parameter
> > parsing. We still did not get a reply from Tomcat maintainers, but I
> still
> > do believe this to be a Tomcat shortcoming and can be easily resolved by
> > making sure o.a.c.connector.Request#readPostBody() uses
> > javax.servlet.ServletRequest#getInputStream() instead.
>
> That is not possible. A wrapped request has no access to any wrapper.
>
> Mark
>
>
> > Additionally,
> > "reading InputStream eagerly" solution assumes that you're the first
> filter
> > along the chain, which is not the case for Spring Boot applications.
> >
> > Best.
> >
> > On Tue, Sep 19, 2017 at 10:48 PM, Igal @ Lucee.org <i...@lucee.org>
> wrote:
> >
> >> Volkan,
> >>
> >> On 9/19/2017 11:21 AM, Volkan Yazıcı wrote:
> >>
> >> Hey Igal,
> >>
> >> Thanks for the response! I believe having more people suffering from the
> >> same limitation makes it more clear that there is a shortcoming that
> needs
> >> to addressed in Tomcat.
> >>
> >> The problem is that Tomcat is compliant with the Servlet specification,
> >> and as Mark pointed out in the original ticket #47410 that is part of
> the
> >> spec.
> >>
> >> Coming back to your project, thanks for the pointer. Though I have two
> >> concerns: 1) It is [still] a Tomcat-specific solution and
> >>
> >> This is not a Tomcat-specific solution.  I use it with Jetty as well.
> It
> >> does use a library from Apache for processing FileUpload, and if you are
> >> running Tomcat you already have it in your classpath, but if you are
> not,
> >> you need to add that jar.
> >>
> >> 2) it consumes the entire InputStream regardless of whether the request
> >> handler will use it or not.
> >>
> >> I've never had an issue with that, and am not sure what you are worried
> >> about?  network traffic?  memory? (the FileUpload library writes the
> >> contents to disk after a certain threshold), but if you're concerned
> with
> >> that then you can write your own filter and model it after mine if you
> want
> >> to hit the ground running.  Then you can break the read whenever you
> want,
> >> though I really think that you're over-optimizing here.
> >>
> >> TBH I did not read your original emails with Chris in full, so I'm not
> >> sure what your requirements are.
> >>
> >>
> >> Best.
> >>
> >> On Tue, Sep 19, 2017 at 7:55 PM, Igal @ Lucee.org <i...@lucee.org>
> wrote:
> >>
> >>> Volkan,
> >>>
> >>> On 9/19/2017 10:47 AM, Volkan Yazıcı wrote:
> >>>
> >>>> Did not try (or consider) using a Tomcat Valve, since it would make
> the
> >>>> entire tool Tomcat-specific. I would rather find a way to solve the
> >>>> problem
> >>>> in a container agnostic way.
> >>>>
> >>> I had a similar issue so I wrote a simple Filter and named it
> >>> "RereadableServletRequestFilter":
> >>> https://github.com/isapir/servlet-filter-utils#rereadableser
> >>> vletrequestfilter
> >>>
> >>> HTH,
> >>>
> >>>
> >>> Igal
> >>>
> >>
> >>
> >> Igal Sapir
> >> Lucee Core Developer
> >> Lucee.org <http://lucee.org/>
> >>
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>

Reply via email to