You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Martijn Dashorst <ma...@gmail.com> on 2009/12/14 14:59:03 UTC

Re: Buffer not retrieved if RENDER_TO_BUFFER is used with IndexedHybridUrlCodingStrategy and the web server uses URL rewriting (cookies switched off)

Use the URL Rewriting features of your container.

Martijn

On Mon, Dec 14, 2009 at 2:52 PM, Engler Adrian <ad...@ecofin.ch> wrote:
> Hello,
>
> 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).
>
> Thank you!
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>



-- 
Become a Wicket expert, learn from the best: http://wicketinaction.com
Apache Wicket 1.4 increases type safety for web applications
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


RE: Buffer not retrieved if RENDER_TO_BUFFER is used with IndexedHybridUrlCodingStrategy and the web server uses URL rewriting (cookies switched off)

Posted by Engler Adrian <ad...@ecofin.ch>.
Thank you for your answer; I have created the JIRA issue
https://issues.apache.org/jira/browse/WICKET-2615

Since the problem only occurs with the default render strategy
RenderStrategy.REDIRECT_TO_BUFFER in combination with certain URL coding
strategies, there are workarounds, such as using
RenderStrategy.REDIRECT_TO_RENDER, therefore I suppose it should be
categorized as Minor.

However, I think this issue points at potential problems with the key
used with RenderStrategy.REDIRECT_TO_BUFFER for storing buffered
responses that might (in combination with certain URL coding strategies)
go beyond the issue observed with URL rewriting in this case - so,
although it is not urgent, it might still be important.

Adrian Engler

-----Original Message-----
From: Martijn Dashorst [mailto:martijn.dashorst@gmail.com] 
Sent: Montag, 14. Dezember 2009 15:00
To: users@wicket.apache.org
Subject: Re: Buffer not retrieved if RENDER_TO_BUFFER is used with
IndexedHybridUrlCodingStrategy and the web server uses URL rewriting
(cookies switched off)

Ah... ok. this is a bug, file a JIRA issue please.

Martijn

On Mon, Dec 14, 2009 at 2:59 PM, Martijn Dashorst
<ma...@gmail.com> wrote:
> Use the URL Rewriting features of your container.
>
> Martijn
>
> On Mon, Dec 14, 2009 at 2:52 PM, Engler Adrian
<ad...@ecofin.ch> wrote:
>> Hello,
>>
>> 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).
>>
>> Thank you!
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>
>
>
> --
> Become a Wicket expert, learn from the best: http://wicketinaction.com
> Apache Wicket 1.4 increases type safety for web applications
> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0
>



-- 
Become a Wicket expert, learn from the best: http://wicketinaction.com
Apache Wicket 1.4 increases type safety for web applications
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Buffer not retrieved if RENDER_TO_BUFFER is used with IndexedHybridUrlCodingStrategy and the web server uses URL rewriting (cookies switched off)

Posted by Martijn Dashorst <ma...@gmail.com>.
Ah... ok. this is a bug, file a JIRA issue please.

Martijn

On Mon, Dec 14, 2009 at 2:59 PM, Martijn Dashorst
<ma...@gmail.com> wrote:
> Use the URL Rewriting features of your container.
>
> Martijn
>
> On Mon, Dec 14, 2009 at 2:52 PM, Engler Adrian <ad...@ecofin.ch> wrote:
>> Hello,
>>
>> 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).
>>
>> Thank you!
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>
>
>
> --
> Become a Wicket expert, learn from the best: http://wicketinaction.com
> Apache Wicket 1.4 increases type safety for web applications
> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0
>



-- 
Become a Wicket expert, learn from the best: http://wicketinaction.com
Apache Wicket 1.4 increases type safety for web applications
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.4.0

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org