struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ali Akhtar <ali.rac...@gmail.com>
Subject Re: Struts seems to reset the action instance while its still in interceptor
Date Sun, 03 Nov 2013 21:49:12 GMT
Hopefully I am incorrect, however the following lines in my interceptor's
intercept method:

     action =  ai.getAction();
    String result = ai.invoke();
    logger.debug("Orig action : " + action.toString()  +" , now : " +
ai.getAction().toString() );

Do produce two different toString() codes for the original action and the
new ai.getAction(). Is there any scenario in which this could happen?

I'm serving two actions from the same class, i.e mysite/foo is being served
by FooAction.foo(), and mysite/bar is being served by FooAction.bar(). So
in both cases, the same class is serving two actions. Could this have any
bearing on why action.toString() and ai.getAction.toString() are producing
different codes?


On Mon, Nov 4, 2013 at 2:18 AM, Dave Newton <davelnewton@gmail.com> wrote:

> You are incorrect. Actions are instantiated per-request. Other than that,
> you will need to provide a working example that exhibits the incorrect
> behavior.
>  On Nov 3, 2013 12:57 PM, "Ali Akhtar" <ali.rac200@gmail.com> wrote:
>
> > Hello,
> >
> > It seems that if I have two concurrent requests being made to the same
> > action, e.g mysite.com/fooAction, then struts resets the first action's
> > instance while that instance may still be in the interceptor.
> >
> > E.g, if I have the following code in my interceptor:
> >
> >     action =  ai.getAction();
> >     String result = ai.invoke();
> >     logger.debug("Orig action : " + action.toString()  +" , now : " +
> > ai.getAction().toString() );
> >
> > And if I make two concurrent requests to the same action (e.g using
> > javascript), then the line:
> >
> >     logger.debug("Orig action : " + action.toString()  +" , now : " +
> > ai.getAction().toString() );
> >
> > will sometimes produce two different `toString()` codes, showing that the
> > original action was in a different instance than the last action.
> >
> > This is a big problem, because now, if I had any code in the interceptor,
> > which was setting certain things on my action, e.g doing the following:
> >
> >     MyAction action =  (MyAction) ai.getAction();
> >     Auth auth = new Auth ( action.getSession() );
> >     action.setAuth(auth);
> >     action.setCookiesMap( Util.getAllCookies() );
> >     String result = ai.invoke();
> >
> > then there is no guarantee that all those things which I've set on my
> > action are in fact going to be passed to the correct instance. I.e, when
> > `ai.invoke()` is called, it may in fact call a completely different
> > instance of the action, which has different cookies or other data set on
> > it. This could result in different users being given access to each
> other's
> > data.
> >
> > Am I correct in all of this? If so, is there a solution to this problem?
> > Because this seems to completely defeat the purpose of interceptors.
> >
> > Thanks in advance.
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message