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 2014/08/06 12:55:13 UTC
[jira] [Commented] (WW-3415) Issues with Token session interceptor
- Blank page is returned in case of double submission
[ https://issues.apache.org/jira/browse/WW-3415?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14087524#comment-14087524 ]
Lukasz Lenart commented on WW-3415:
-----------------------------------
Maybe it is related to WW-3865 and WW-3865 ? Can you test with the latest available version?
> Issues with Token session interceptor - Blank page is returned in case of double submission
> -------------------------------------------------------------------------------------------
>
> Key: WW-3415
> URL: https://issues.apache.org/jira/browse/WW-3415
> Project: Struts 2
> Issue Type: Bug
> Components: Core Interceptors
> Affects Versions: 2.0.11.1
> Reporter: Sachin Tandon
> Fix For: 2.3.18
>
>
> Blank page is returned in case of double submission. I am using struts version - 2.0.11.1
> I have extendend TokenSessionStoreInterceptor class in my code and not changed any functionality. Following is how my class looks like
> public class MyClass extends TokenSessionStoreInterceptor{
> /**
> * Default Serial Version Id
> */
> private static final long serialVersionUID = 1L;
>
> protected String handleInvalidToken(ActionInvocation invocation) throws Exception {
> ActionContext ac = invocation.getInvocationContext();
> HttpServletRequest request = (HttpServletRequest) ac.get(ServletActionContext.HTTP_REQUEST);
> HttpServletResponse response = (HttpServletResponse) ac.get(ServletActionContext.HTTP_RESPONSE);
> String tokenName = TokenHelper.getTokenName();
> String token = TokenHelper.getToken(tokenName);
> if ((tokenName != null) && (token != null)) {
> Map params = ac.getParameters();
> params.remove(tokenName);
> params.remove(TokenHelper.TOKEN_NAME_FIELD);
> ActionInvocation savedInvocation = InvocationSessionStore.loadInvocation(tokenName, token);
> if (savedInvocation != null) {
> // set the valuestack to the request scope
> ValueStack stack = savedInvocation.getStack();
> Map context = stack.getContext();
> request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, stack);
> ActionContext savedContext = savedInvocation.getInvocationContext();
> savedContext.getContextMap().put(ServletActionContext.HTTP_REQUEST, request);
> savedContext.getContextMap().put(ServletActionContext.HTTP_RESPONSE, response);
> Result result = savedInvocation.getResult();
> if ((result != null) && (savedInvocation.getProxy().getExecuteResult())) {
> synchronized (context) {
> result.execute(savedInvocation);
> }
> }
> // turn off execution of this invocations result
> invocation.getProxy().setExecuteResult(false);
> return savedInvocation.getResultCode();
> }
> }
> return INVALID_TOKEN_CODE;
> }
> protected String handleValidToken(ActionInvocation invocation) throws Exception {
> // we know the token name and token must be there
> String key = TokenHelper.getTokenName();
> String token = TokenHelper.getToken(key);
> InvocationSessionStore.storeInvocation(key, token, invocation);
>
> return invocation.invoke();
> }
> }
> Now, whenever I do a double submission for a functionality like search (which gets loads of data from the database), previously saved invocation does not complete and savedInvocation.getResultCode() returns null (inside handleInvalidToken method). Due to which I receive a blank page.
> Whenever I do a debug(from eclipse) on handleInvalidToken method, savedInvocation.getResultCode() value changes from null to "success" as I wait inside the method for sometime.
> I have also put in savedInvocation.isExecuted() in this handleInvalidToken method and noticed that its value changes from false to true if I wait on the line of code for some time.
--
This message was sent by Atlassian JIRA
(v6.2#6252)