2014-04-15 160 views
0

原因:事实证明,失败的验证将导致令牌重置如果表单被多次提交速度非常快,它有时会导致形式令牌和htmlsession令牌是不同。 (也许在加载页面之后,设置该令牌的线程仍然从双提交中运行,并在呈现jsp页面后在htmlsession中更改该令牌)。这就是为什么在提交验证失败后每次验证都会失败。问题使用令牌拦截器与验证拦截

不得不调整令牌的设置方式。关于这个更新细节在这个更新的线程。

https://stackoverflow.com/questions/23301475/invalid-token-thrown-on-first-submit-by-tokensession

我正在同时使用令牌和验证拦截web应用程序。简要说明是在jsp页面中使用<s:token/>设置令牌,并在动作调用TokenHelper.validToken()用于检查令牌是否有效。问题出现在用户发送多个帖子或表单提交时,并且失败validateSave()。用户被发回到表单页面。在此之后,即使用户只提交一次,也会导致无效令牌。 “actionSession”中的表单和令牌中的隐藏标记(我不知道确切的名称,但它是将该标记的副本保存以供将来比较的地方)。它们不相同,导致无效标记在第一次提交。我遇到了麻烦,以及如何处理此事件。

任何输入将不胜感激。

预先感谢您。

+0

与您的问题相关的邮政编码。 –

回答

0

如果您使用的是令牌拦截器,则根本不需要检查令牌是否有效。令牌拦截器对我们来说是&如果令牌无效,它只会返回一个结果,即“invalid.token”。我们想要做的是,只需将结果“invalid.token”的动作配置到所需的页面即可。不要忘记添加interceptor-ref。检查下面给出的配置代码。

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

希望这会对你有帮助。

+0

tokenSession拦截器修复了我的问题。这和我更新了我使用的struts版本。由于无效令牌的重定向速度更快,所以我得到的NPE在版本2.1.3中已得到修复,这一定是因为同步补丁,因此在结果jsp中存在NPE。无论如何,非常感谢。 – user3037365