討論區: 公開討論 (Thread #36278)

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

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

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

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

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

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

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

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

④子画面を閉じる

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

⑥トークンエラー

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

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

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

回覆 #75013×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登入

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

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

回覆 #75029×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登入

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

大変失礼いたしました。
TERASOLUNA Server Framework for Java WEB 2.0.5.0
を利用しております。
回覆: #75029

回覆 #75030×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登入

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

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

回覆 #75070×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登入

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

はい。使用しています。
Terasoluna IDE3を使って開発を行っています。
回覆: #75070

回覆 #75083×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登入

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×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) 登入