GitHub user nacx opened a pull request:

    https://github.com/apache/incubator-guacamole-client/pull/187

    Add a convenience filter to cache the contents of HTTP requests

    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.
    
    This PR adds a convenience filter that caches the request contents to allow 
free access to its body and parameters, so servlets and filters can access the 
request information normally. Without this caching, 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.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/nacx/incubator-guacamole-client cached-request

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/incubator-guacamole-client/pull/187.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #187
    
----
commit 30d4e74088c3a4330887803501dd3db13fea658e
Author: Ignasi Barrera <[email protected]>
Date:   2017-09-21T09:24:08Z

    Add the GuacamoleHTTPCachingFilter
    
    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.
    
    This commit adds a convenience filter that caches the request contents
    to allow free access to its body and parameters, so servlets and filters
    can access the request information normally.

----


---

Reply via email to