[ 
https://issues.apache.org/jira/browse/GUACAMOLE-385?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ignasi Barrera updated GUACAMOLE-385:
-------------------------------------
    Description: 
Some implementations of the HTTP servlet request do not allow a free use of the 
{{getInputStream()}} and {{getParameter()}} methods. This is especially 
annoying in Apache Tomcat >= 7 and Servlet 3.0, where invoking the 
{{getParameter()}} method consumes the {{InputStream}} (making later uses of it 
fail) and consuming the InputStream makes later {{getParameter()}} calls fail 
to find the parameters, as the request body has been consumed.

If the request parameters are accessed in the tunnel servlet or a previous 
filter, the {{doWrite}} method in the base HTTP tunnel servlet always gets an 
already consumed {{InputStream}} and does not write anything to the socket, 
causing an eventual timeout in the client.

This only happens if the media type of the request is 
{{application/x-www-form-urlencoded}}.

This is related to: [GUAC-1252|https://glyptodon.org/jira/browse/GUAC-1252].

  was:
Some implementations of the HTTP servlet request do not allow a free use of the 
{{getInputStream()}} and {{getParameter()}} methods. This is especially 
annoying in Apache Tomcat >= 7 and Servlet 3.0, where invoking the 
{{getParameter()}} method consumes the {{InputStream}} (making later uses of it 
fail) and consuming the InputStream makes later {{getParameter()}} calls fail 
to find the parameters, as the request body has been consumed.

This causes issues for tunnel servlets that need to access the request 
parameters, commonly used to pass authentication tokens or additional info 
provided in the {{tunnel.connect()}} call, as the tunnel needs later access to 
the request input stream. Applications using the popular Spring framework may 
be affected too, since some of its common filters also access the request 
parameters.

If the request parameters are accessed in the tunnel servlet or a previous 
filter, the {{doWrite}} method in the base HTTP tunnel servlet always gets an 
already consumed {{InputStream}} and does not write anything to the socket, 
causing an eventual timeout in the client.

This is related to: [GUAC-1252|https://glyptodon.org/jira/browse/GUAC-1252], 
but none of the solutions there fix the issue in Tomcat 7 nor the existing 
workarounds found in StackOverflow and the referenced threads.


> Add a convenience filter to cache the contents of HTTP requests
> ---------------------------------------------------------------
>
>                 Key: GUACAMOLE-385
>                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-385
>             Project: Guacamole
>          Issue Type: Improvement
>          Components: guacamole-common-js
>    Affects Versions: 0.9.13-incubating
>         Environment: Apache Tomcat >= 7
> Servlet 3.0
>            Reporter: Ignasi Barrera
>
> Some implementations of the HTTP servlet request do not allow a free use of 
> the {{getInputStream()}} and {{getParameter()}} methods. This is especially 
> annoying in Apache Tomcat >= 7 and Servlet 3.0, where invoking the 
> {{getParameter()}} method consumes the {{InputStream}} (making later uses of 
> it fail) and consuming the InputStream makes later {{getParameter()}} calls 
> fail to find the parameters, as the request body has been consumed.
> If the request parameters are accessed in the tunnel servlet or a previous 
> filter, the {{doWrite}} method in the base HTTP tunnel servlet always gets an 
> already consumed {{InputStream}} and does not write anything to the socket, 
> causing an eventual timeout in the client.
> This only happens if the media type of the request is 
> {{application/x-www-form-urlencoded}}.
> This is related to: [GUAC-1252|https://glyptodon.org/jira/browse/GUAC-1252].



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to