You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (Jira)" <ji...@apache.org> on 2022/06/18 05:20:00 UTC

[jira] [Commented] (WW-5195) Dispatcher: Infinite loop with dispatcher FORWARD

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

Lukasz Lenart commented on WW-5195:
-----------------------------------

The only workaround now is to use "redirect" instead of "dispatcher" result.

> Dispatcher: Infinite loop with dispatcher FORWARD
> -------------------------------------------------
>
>                 Key: WW-5195
>                 URL: https://issues.apache.org/jira/browse/WW-5195
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core, Core Actions
>    Affects Versions: 6.0.0
>            Reporter: gubiao
>            Priority: Major
>             Fix For: 6.0.1
>
>
> *Action a:*
> public String a()
> {    
> request.getRequestDispatcher("/b.action").forward(request, response);    
> return null;
> }
>  
> *Action b:*
> public String b()
> { ... }
>  
> When the user calls /a.action, it is automatically forwarded to b.action. These codes work well in Struts 2.5.x version.
> After upgrading to the 6.0.0 version, code like the above will cause an infinite loop issue.
> In Struts 6.0.0, code like "actionA->forward->actionB" will cause infinite loop issue.
>  
> This issue also exists when using ServletDispatcherResult to initiate a forward request:
> <result name="success" type="dispatcher">
>     <param name="location">b.action</param>
> </result>
>  
> This issue related to [#179|https://github.com/apache/struts/pull/179] pull request.
> [https://github.com/apache/struts/pull/179/files#diff-a394bef2608163b6810c293626eb1356e3be43ec82f94fe6da881f0608a86547]
>  
> ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
> if (invocation == null || invocation.isExecuted())
> { // *The code here doesn't handle the servlet forward case*    proxy=getContainer().getInstance(ActionProxyFactory.class).createActionProxy(namespace, name, method, extraContext, true, false); }
> else
> {     proxy=invocation.getProxy(); }
>  
> Once this problem occurs, the jvm process consumes a lot of CPU resources, and there is no log to troubleshoot.
>  
> I don't know much about how Struts internals work, is there any workaround other than delayed upgrade to Struts 6.x version?
>  



--
This message was sent by Atlassian Jira
(v8.20.7#820007)