CSRF防止を追加する必要があるコードを継承し、struts2tokenSessionインターセプターを使用してこれを実行しようとしています。次のようにstruts2トークンタグを使用してフォームにトークンを追加しています。
<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;
}
リクエストをインターセプトし、トークンを追加していますが、struts2tokenSessionインターセプターがinvalid.tokenを返しています。このインターセプターがなくても、コードは期待どおりに機能します。(struts2 xmlファイルは投稿されていません-必要に応じて関連するセクションを投稿します)。また、基本的なhtml送信ボタンを使用する(つまり、javascriptまたはjqueryを経由しない)他のページでtokenSessionインターセプターを使用しましたが、これも期待どおりに機能します。トークンを無効にしているのは何ですか?
注意:私が継承したプロジェクトでは、標準のhtml、struts2タグ、ExtJS、JQueryの奇妙な組み合わせを使用しています。いつかこれをクリーンアップしますが、現時点では、tokenSessionインターセプターをコード内でできるだけ早く機能させる必要があります(数百ページに同様の修正を適用する必要があるため...)。
ヘルプ/ポインタ/ヒントなどは大歓迎です!
よろしく、
ジョン