[ 
https://issues.apache.org/jira/browse/WICKET-5486?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13879970#comment-13879970
 ] 

Sven Ludwig commented on WICKET-5486:
-------------------------------------

Here is an example case regarding shouldPreserveClientUrl() vs. 
RedirectPolicy.ALWAYS_REDIRECT. A developer would perhaps write:

        getRequestCycle().scheduleRequestHandlerAfterCurrent(new 
RenderPageRequestHandler(new PageProvider(page),
                RenderPageRequestHandler.RedirectPolicy.ALWAYS_REDIRECT));

When a bit later the logic in WebPageRenderer is executed, it is possible (due 
to whatever reason) that the request has traversed at least one server-internal 
forward. In such a case, ServletWebRequest usually has forward attributes, in 
particular the Request URI. Therefore, 
ServletWebRequest.shouldPreserveClientUrl() returns true.

Due to the logic in WebPageRenderer, where shouldPreserveClientUrl() has 
precedence over RedirectPolicy.ALWAYS_REDIRECT, the result may be that no 
redirect is performed.


> WebPageRenderer should honor RedirectPolicy.ALWAYS_REDIRECT more consistently
> -----------------------------------------------------------------------------
>
>                 Key: WICKET-5486
>                 URL: https://issues.apache.org/jira/browse/WICKET-5486
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 6.13.0, 7.0.0
>            Reporter: Sven Ludwig
>            Priority: Minor
>              Labels: contract, unexpected
>
> In WebPageRenderer shouldPreserveClientUrl() currently has precedence over 
> RedirectPolicy.ALWAYS_REDIRECT.
> This can lead to confusion or unexpected behavior when 
> RedirectPolicy.ALWAYS_REDIRECT is explicitely set, but for some reason 
> shouldPreserveClientUrl() returns true and thus no redirect is performed due 
> to the logic in WebPageRenderer.
> A fix for this particular problem could be implemented in 
> WebPageRenderer as of Wicket 6.12.0 by changing line 211 to:
>                 || (shouldPreserveClientUrl && getRedirectPolicy() != 
> RedirectPolicy.ALWAYS_REDIRECT)) //
> Note that this problem is slightly related to WICKET-5484. Both fixes 
> combined the line could look like this:
>                 || (shouldPreserveClientUrl && !isAjax && getRedirectPolicy() 
> != RedirectPolicy.ALWAYS_REDIRECT)) //
> Note: Possibly, there are other cases in which WebPageRenderer does not honor 
> RedirectPolicy.ALWAYS_REDIRECT. It should be considered whether or not it 
> would be wise/feasible to put an if condition in front of the logic to boldly 
> check whether getRedirectPolicy() == RedirectPolicy.ALWAYS_REDIRECT and, if 
> this is the case, go rather straight for the redirect, not checking other 
> conditions.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to