On 21/09/17 22:33, Volkan Yazıcı wrote:
> 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.

That will make no difference. It won't call your implementation because
you are wrapping the request.

Mark


> 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
>>
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to