フォーラム: 公開討議 (スレッド #36278)

ajax、validationによる謎のトークンエラーについて (2014-12-10 15:32 by anonymous #75013)

いつもお世話になっております。

トークンチェックに悩まされており、ご質問をさせてください

ある親画面からJQueryを使ったモーダルの子画面を生成し、子画面での情報を親画面に引き込むような処理を実装しています。

子画面ではajaxによる非同期処理でvalidationを使った入力チェックを実装しているのですが、以下の流れで想定外のトークンチェックエラーが発生をしてしまいます。

①親画面から子画面(モーダル)を生成

②子画面でvalidationエラーを発生させる

③子画面でvalidationエラーとならない処理を行う

④子画面を閉じる

⑤親画面でトークンチェックを行っているアクションを実行

⑥トークンエラー

子画面での処理は全てsaveTokenはfalseにしてサーバのトークンが変わらないようにしてあるので、親画面でのトークンでトークンエラーとなる理由がわかりません、、

なお、②の処理を行わない、または③の処理を行わない
であれば発生をせず②③両方の処理を行った際のみ発生をします

原因及び対応方法についてご教示頂きたく

メッセージ #75013 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: ajax、validationによる謎のトークンエラーについて (2014-12-12 17:19 by futamuraa #75029)

恐れ入りますが、ご利用中のFWの種類、及び、バージョンを教えて頂けないでしょうか?
#75013 への返信

メッセージ #75029 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: ajax、validationによる謎のトークンエラーについて (2014-12-12 19:21 by anonymous #75030)

大変失礼いたしました。
TERASOLUNA Server Framework for Java WEB 2.0.5.0
を利用しております。
#75029 への返信

メッセージ #75030 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: ajax、validationによる謎のトークンエラーについて (2014-12-19 11:29 by futamuraa #75070)

承知いたしました。
五月雨の質問となり、大変恐縮ですが、
「WE-01 アクション拡張機能」のトランザクショントークンチェックを使用されていますか?
#75030 への返信

メッセージ #75070 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: ajax、validationによる謎のトークンエラーについて (2014-12-23 15:49 by anonymous #75083)

はい。使用しています。
Terasoluna IDE3を使って開発を行っています。
#75070 への返信

メッセージ #75083 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

Re: ajax、validationによる謎のトークンエラーについて (2014-12-24 17:29 by futamuraa #75092)

> ⑤親画面でトークンチェックを行っているアクションを実行

こちらでアクションを実行する際のリクエストで、
クライアント側からトランザクショントークンが送信されているでしょうか。

クライアント側からトークンが送信されていない場合、
サーバ側のセッションで保持されているトークンと不一致となり、
「トークンエラー」となっている可能性があります。

より具体的には、
親画面でのトークンチェックを行っているアクションを起動するリクエストパラメータが

リクエストパラメータ名:org.apache.struts.taglib.html.TOKEN
リクエストパラメータ値:<トークン値>

という形式でサーバ側に渡されている必要があります。

この形式でリクエストパラメータがサーバ側に送信されているにもかかわらず
トークンエラーとなる場合ですが、
上記<トークン値>はサーバ側によるsaveToken()が
行われた際に値が入れ替わるため、直近のsaveToken()で払い出された値をクライアント側で送信する必要があります。

特にAjaxによる画面遷移とは非同期のリクエスト送信を行っている場合、
親子画面の構成を問わず、
サーバ側のセッションで保持されているトークンが途中で差し替わっていないこと、
またセッションを破棄される操作が行われていないか(ログアウト処理やセッションタイムアウトが該当します)
をご確認ください。

(現在の)サーバ側のトークン値は HttpSessionに対し、
HttpSession#getAttribute("org.apache.struts.action.TOKEN") を実行することで採取することができます。
#75083 への返信

メッセージ #75092 への返信×

Wiki文法は使えません
ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする