我繼承了一些代碼,現在我必須添加CSRF預防功能,並試圖使用struts2 tokenSession攔截器來執行此操作。我使用的是Struts2的記號標記,像這樣將令牌到我的表格:struts2 invalid.token在使用JQuery提交表單時返回
<form id="updateObject" name="updateObject" action="<%=request.getContextPath()%>/prv/updateObject.action" method="POST">
<fieldset class="x-fieldset">
<legend>Update object - Action Required</legend>
<div>...</div>
<s:token />
<s:hidden name="id" id="objectId" />
more stuff here...
<input type="submit" value="Update Object" onclick="javascript:return doUpdateObject('myAction');"/>
</fieldset>
</form>
在我的JavaScript函數,我添加/刪除一些驗證規則(根據需要採取的行動,並提交形式:
function doUpdateObject(action){
actionPanel.registerAction(action); // this function places the action name in an in-scope variable
doUpdateObjectValidationSetup(action); // this function adds/removes jquery validation rules depending upon the action
if($("#updateObject").valid()){
$("form#updateObject").submit();
}
return false;
}
我截獲了請求並添加了一個令牌,但是struts2 tokenSession攔截器正在返回invalid.token,代碼沒有這個攔截器就可以正常工作(struts2 xml文件未發佈 - 將發佈相關部分if需要)我還在其他使用基本html提交按鈕的頁面中使用了tokenSession攔截器(即不去通過JavaScript或jQuery的ing),這也符合預期。什麼使令牌無效?
N.B.我繼承的項目使用了標準html,struts2標籤,ExtJS和JQuery的奇怪混合。我會在某個時候清理它,但目前我只需要讓代碼中的tokenSession攔截器儘快工作(因爲我必須對幾百頁應用類似的修復程序......)。
任何幫助/指針/技巧/等非常感謝!
問候,
約翰
謝謝,但沒有兩個的提交也不會產生 - 正如我所說,我已經攔截檢查參數的要求,只有一個請求被髮送。儘管我已經刪除了'javascript:'。 – John 2010-06-16 07:51:32