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

Reply via email to