[ 
https://issues.apache.org/struts/browse/WW-2902?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sitaram Reddy updated WW-2902:
------------------------------

    Description: 
I have looked into the source code and found the reason. In 
TokenInterceptor.doIntercept(...), there is this code:

                Map session = ActionContext.getContext().getSession();

                synchronized (session) {
                        if (!TokenHelper.validToken()) {
                                return handleInvalidToken(invocation);
                        }

                        return handleValidToken(invocation);
                }

This block is essentially not synchronized! I found that the session Map is not 
a unique object across requests within an user session - in contrast with the 
HttpSession object provided by the Servlet API. Perhaps that should be 
considered the real bug?  

A previous bug WW-1786 also points out that the above block is not synchronized 
- that fix would be redundant once this issue is resolved.

  was:
I have looked into the source code and found the reason. In 
TokenInterceptor.doIntercept(...), there is this code:

                Map session = ActionContext.getContext().getSession();

                synchronized (session) {
                        if (!TokenHelper.validToken()) {
                                return handleInvalidToken(invocation);
                        }

                        return handleValidToken(invocation);
                }
I found that the session Map is thread dependant and so the above block is 
essentially not synchronized! An previous bug WW-1786 also points out that the 
block is not synchronized - that fix would be redundant once this issue is 
resolved.


> Session token usage error: java.lang.IllegalStateException: Context has not 
> been prepared for next connection
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: WW-2902
>                 URL: https://issues.apache.org/struts/browse/WW-2902
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Interceptors
>    Affects Versions: 2.1.2
>            Reporter: Sitaram Reddy
>
> I have looked into the source code and found the reason. In 
> TokenInterceptor.doIntercept(...), there is this code:
>               Map session = ActionContext.getContext().getSession();
>               synchronized (session) {
>                       if (!TokenHelper.validToken()) {
>                               return handleInvalidToken(invocation);
>                       }
>                       return handleValidToken(invocation);
>               }
> This block is essentially not synchronized! I found that the session Map is 
> not a unique object across requests within an user session - in contrast with 
> the HttpSession object provided by the Servlet API. Perhaps that should be 
> considered the real bug?  
> A previous bug WW-1786 also points out that the above block is not 
> synchronized - that fix would be redundant once this issue is resolved.

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