2014-04-15 204 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