2013-03-12 1 views
1

je tente d'obtenir l'intercepteur de tokenSession au travail (Struts 2.0.14), mais toujours obtenir les mises en garde:Struts 2 intercepteurs sessionToken redirige toujours à l'erreur

2013-03-13 08:32:09,395 [17] DEBUG Intercepting invocation to check for valid transaction token. | org.apache.struts2.interceptor.TokenSessionStoreInterceptor.doIntercept(128) 
2013-03-13 08:32:09,395 [17] WARN Could not find token name in params. | org.apache.struts2.util.TokenHelper.getTokenName(124) 
2013-03-13 08:32:09,396 [17] DEBUG no token name found -> Invalid token | org.apache.struts2.util.TokenHelper.validToken(154) 
2013-03-13 08:32:09,397 [17] WARN Could not find token name in params. | org.apache.struts2.util.TokenHelper.getTokenName(124) 
2013-03-13 08:32:09,397 [17] WARN Could not find token mapped to token name null | org.apache.struts2.util.TokenHelper.getToken(105) 
2013-03-13 08:32:09,398 [17] DEBUG Forwarding to location /WEB-INF/view/support/TokenError.jsp | org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(113) 

Le struts.xml a la configuration d'intercepteur suivante :

  <package name="survey" extends="struts-default"> 
     <result-types> 
      <result-type name="csv" 
        class="webapp.CsvResultType"/> 
      </result-types> 

     <interceptors> 
      <interceptor name="log" 
       class="struts.LoggingInterceptor"/> 
      <interceptor name="formAuthentication" 
       class="security.FormAuthenticationInterceptor"/> 
      <interceptor-stack name="default"> 
       <interceptor-ref name="log"/> 
       <interceptor-ref name="servletConfig"/> 
       <interceptor-ref name="formAuthentication"/> 
       <!--interceptor-ref name="chain"/>--> 
       <interceptor-ref name="fileUpload"/> 
       <interceptor-ref name="checkbox"/> 
       <interceptor-ref name="params"/> 
      </interceptor-stack> 
      <interceptor-stack name="defaultTokenStack"> 
       <interceptor-ref name="tokenSession"/> 
       <interceptor-ref name="default"/> 
      </interceptor-stack> 

     </interceptors> 

     <default-interceptor-ref name="default"/> 

     <!-- --> 

     <global-results> 
      <result name="blank">/WEB-INF/view/support/Blank.jsp</result> 
      <result name="error">/WEB-INF/view/support/Error.jsp</result> 
      <result name="insufficientPrivileges">/WEB-INF/view/support/InsufficientPrivileges.jsp</result> 
      <!--result name="file" type="file"></result--> 
     </global-results> 

    </package> 

Avec les définitions d'action:

<package name="respondent" namespace="/respondent" extends="survey"> 
    <action name="*" class="controller.respondent.{1}Action"> 
     <interceptor-ref name="defaultTokenStack"/> 
     <result name="list">/WEB-INF/view/respondent/{1}List.jsp</result> 
     <result name="edit">/WEB-INF/view/respondent/{1}Edit.jsp</result> 
     <result name="view">/WEB-INF/view/respondent/{1}View.jsp</result> 
     <result name="success">/WEB-INF/view/respondent/{1}.jsp</result> 
     <result name="invalid.token">/WEB-INF/view/support/TokenError.jsp</result> 
    </action> 
</package> 

le jsp a le Toke tag n:

<s:form action="FunctionSummary.action" method="post"> 
<s:token/> 

    <table class="buttons"> 
     <tr> 
      <s:if test="surveyStarted"> 
       <td><s:submit value="Resume Survey"/></td> 
      </s:if> 
      <s:else> 
       <td><s:submit value="Start Survey"/></td> 
      </s:else> 

     </tr> 
    </table> 

</s:form> 

Tout accès à cette page entraîne toujours une redirection vers le résultat invalid.token et les avertissements ci-dessus.

J'ai validé que sans l'intercepteur configuré, la source de la page a le jeton mais je ne peux pas obtenir l'intercepteur sessionToken pour le voir.

Toute aide serait très appréciée ...

Merci

+0

Vous utilisez une version très ancienne de Struts2. Passez à la version 2.3.8 et réessayez. – rees

+0

Qu'entendez-vous par "tout accès à cette page"? Utilisez-vous cette action pour montrer cette page? L'intercepteur de jeton doit être configuré sur l'action à laquelle vous vous êtes soumis. –

Répondre

1

Essayez de mettre votre tag <s:token/> dans vos <table> tags. J'ai le même problème que vous. Et après je mets <s:token/> en <table> tag problème résolu.

<s:form action="" id = "" theme="simple" method = "post"> 
<table id = "" border="1" width="200"> 
    <s:token/> <!-- In the table tag --> 

</table> 
</s:form> 
+0

La balise '' doit être à l'intérieur d'une balise de formulaire. Ce n'est pas grave si c'est dans l'étiquette de table ou non. –