Struts2 invalid.token возвращается при отправке формы с использованием JQuery - PullRequest
0 голосов
/ 15 июня 2010

Я унаследовал некоторый код, в который мне теперь нужно добавить предотвращение 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 (как я должен применить аналогичное исправление для нескольких хусто страниц ...).

Любая помощь / указатели / советы / и т. д. с благодарностью!

С уважением,

Джон

Ответы [ 2 ]

0 голосов
/ 16 июня 2010

Теперь это работает без изменений!Просто сделал полную перестройку, очистил кеш, перезагрузил и т. Д. Понятия не было, что вызвало первоначальную проблему.Извините за потраченное время.

Джон

0 голосов
/ 16 июня 2010

Вы уверены, что не генерируете два представления?(Просмотрите журналы вашего веб-сервера)

Если это так, возможно, это из-за этого:

onclick="javascript:return doUpdateObject('myAction');".

Это не правильно, псевдопротокол javascript: должен использоваться только в URL (ej href="..."), а не в обработчиках событий.Замените его на onclick="return doUpdateObject('myAction')".

Я сомневаюсь, что проблема вызвана этим, хотя.

...