[
https://issues.apache.org/jira/browse/WICKET-2615?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adrian Engler updated WICKET-2615:
----------------------------------
Attachment: bufferUrlProblem.jar
> URL mismatch with RENDER_TO_BUFFER when URL rewriting features of container
> are used
> ------------------------------------------------------------------------------------
>
> Key: WICKET-2615
> URL: https://issues.apache.org/jira/browse/WICKET-2615
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.4.3
> Environment: occurred with Tomcat and Jetty; does not seem to be
> environment-specific
> Reporter: Adrian Engler
> Priority: Minor
> Attachments: bufferUrlProblem.jar
>
>
> In a Wicket web application (Wicket 1.4.3) I noticed that feedback messages
> were not displayed when cookies were disabled in the browser. It turned out
> that this problem had to do with the combination of the URL coding strategy
> that was used (IndexedHybridUrlCodingStrategy) and the render strategy,
> RenderStrategy.REDIRECT_TO_BUFFER (which is the default). What actually
> happens when cookies are switched off is that the page is rendered to a
> buffer, a redirect is sent, but then the server does not recognize that it
> should use the contents of the buffer because the URLs do not match, and
> therefore the page is rendered again (this time without the feedback messages
> because they are now already marked as rendered), the buffer is not used.
> If the render strategy is changed to RenderStrategy.REDIRECT_TO_RENDER, there
> is no problem without cookies; the problem only exists when the page is first
> rendered to a buffer and then this buffer is not used.
> The attached minimal application demonstrates this behavior: When cookies are
> enabled, you can click the button "Show feedback message" on the page, and a
> message "Info message generated <time>" is shown. If cookies are disabled, no
> feedback message is shown.
> Example from debugging:
> In WebRequestCycle.redirectTo(...), the variable redirectURL is assigned the
> value home.0;jsessionid=1ie4koskoj2bn; addBufferedResponse is then called
> with the value home.0;jsessionid=1ie4koskoj2bn for buffered. Then, after the
> redirect, in WicketFilter.doGet(...), WebApplication.popBufferedResponse is
> called with the value home.0 for the relativePath parameter. In that method,
> the buffered response is not found (because the real key is
> home.0;jsessionid=1ie4koskoj2bn).
> The problem is that when the buffer is put to the map, a key that includes
> the session ID is used, while for retrieval of the buffered page, a key
> without the session ID is used.
> This problem occurs when IndexedHybridUrlCodingStrategy or the super class
> HybridUrlCodingStrategy is used.
> If the page is not mounted (and not bookmarkable after the form has been
> submitted), there are no problems without cookies because a key without the
> jsessionid is used for storing the buffered response in a map. This has to do
> with the fact that in WebRequestCycle.redirectTo(...) only the part of the
> URL after the "?" is used as a key:
> int index = stripped.indexOf("?");
> [...]
> ((WebApplication) application).addBufferedResponse(sessionId,
> stripped.substring(index + 1), servletResponse);
> If the page is mounted with a HybridUrlCodingStrategy, the value assigned to
> the variable stripped is a string without a "?", therefore, index has the
> value -1 and a URL with jsessionid is used as a key for the buffered page.
> I think it might be good if someone has a look into this; it might also be
> hat in some settings a response is rendered twice (first into the buffer then
> for the client because the buffer is not retrieved because of a URL mismatch)
> without users noticing anything (as long as feedback messages are not used).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.