Cause:发现,如果验证失败,将导致令牌重置,如果表单被多次快速提交,有时会导致表单令牌和htmlsession令牌不同。(可能在加载页面之后,用于设置令牌的线程仍然从双重提交中运行,并在呈现jsp页面后在html会话中更改令牌)。这就是为什么每次提交失败验证之后,令牌验证都会失败的原因。
必须调整令牌的设置方式。有关此更新线程的更多详细信息。
https://stackoverflow.com/questions/23301475/invalid-token-thrown-on-first-submit-by-tokensession
我正在开发一个同时使用令牌和验证拦截器的webapp。简短的描述是使用<s:token/>在jsp页面中设置令牌,在操作调用中使用TokenHelper.validToken()来检查令牌是否有效。当用户发送多个post或表单提交而validateSave()失败时,就会出现此问题。用户被发送回表单页。在此之后,即使用户只提交一次,也会导致一个无效的令牌。表单中隐藏的令牌和'actionSession‘中的令牌(我不知道确切的名称,但它是保存令牌副本以供将来比较的地方)。与第一次提交时导致无效令牌的情况不一样。我在这件事和如何处理这件事上遇到了麻烦。
如有任何意见,将不胜感激。
提前谢谢你。
发布于 2014-04-16 14:25:38
如果使用令牌拦截器,则根本不需要检查令牌是否有效。令牌拦截器为我们执行这个任务&如果令牌无效,它只返回一个结果,即"invalid.token“。我们要做的是,只需将结果"invalid.token“的操作配置到所需的页面。别忘了添加拦截器-引用。检查下面提供的配置代码。
<action name="yourAction" class="com.YourActionClass">
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">/success.jsp</result>
<result name="input">/update.jsp</result>
<result name="invalid.token">/invalid_token.jsp</result>
</action>如果希望在刷新或重新提交表单时向用户显示以前操作的结果页,而不再次调用操作,则可以使用tokenSession拦截器,如下所示。
<action name="yourAction" class="com.YourActionClass">
<interceptor-ref name="tokenSession"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">/success.jsp</result>
<result name="input">/update.jsp</result>
</action>希望这能帮到你。
https://stackoverflow.com/questions/23091820
复制相似问题