Я унаследовал некоторый код, в который мне теперь нужно добавить предотвращение CSRF, и я пытаюсь использовать перехватчик struken2 tokenSession для этого.Я добавляю токен в мою форму, используя тег токена 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;
}
Я перехватил запрос и добавляется токен, однако перехватчик struken2 tokenSession возвращает invalid.token. Код работает без ожидаемого перехватчика. (XML-файл struts2 не опубликован - будет опубликовансоответствующий раздел, если требуется). Я также использовал перехватчик tokenSession на других страницах, которые используют базовую кнопку отправки html (то есть, не используя javascript или jquery), и это также работает, как и ожидалось. Что делает токен недействительным?
NB. В проекте, который я унаследовал, используется странная смесь стандартных тегов html, struts2, ExtJS и JQuery. Я исправлю это в какой-то момент, но на данный момент мне просто нужно, чтобы перехватчик tokenSession работал как можно скорее в коде как-is (как я должен применить аналогичное исправление для нескольких хусто страниц ...).
Любая помощь / указатели / советы / и т. д. с благодарностью!
С уважением,
Джон