- PR -

[Struts]アクションリレー(連鎖)でのsaveTokenについて

1
投稿者投稿内容
はぐ
会議室デビュー日: 2008/12/17
投稿数: 4
投稿日時: 2009-01-29 17:37
■struts-config.xml
コード:
<action path="/displayProduct"
        type="sample.action.DisplayProductAction"
        name="displayProductForm"
        scope="request"
        validate="false">
    <forward name="success" path="/WEB-INF/pages/product.jsp"/>
</action>
<action path="/registProduct"
        type="sample.action.RegistProductAction"
        name="registProductForm"
        scope="request"
        validate="true"
        input="/displayRegistProduct.do">
    <forward name="success" path="/displayProduct.do"/>
</action>


TransactionTokenを有効にしてあるjsp画面から、上記の/registProductをsubmitし、処理が正常に行われた("success"が返ってくる)場合。
アクションのリレーにより、product.jsp画面を表示させたいのですが、tokenエラーにかかってしまいます。

RegistProductActionのはじめでTokenチェックOK、最後にsaveTokenも行っています。

ちなみに、DisplayProductActionのはじめでデバッグのブレークポイントを設定しても処理がそこまでいっていないようです。(Eclipseを使っています)
なぜTokenエラーになるのかが理解できません。


稚拙な説明で申し訳ありませんが、どなたかご教授して頂けないでしょうか。
もし情報が足りないようでしたらご指摘ください。よろしくお願い致します。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2009-01-29 18:50
saveTokenを呼んだタイミングでTokenが発行され、Tokenはページの隠しフィールド(Hidden)とSessionに格納されます。
次回、ポストされた時に、isTokenValidによって、HiddenのTokenとSessionのTokenを比較することで、チェックを行っています。
アクションリレーをすると、隠しフィールドのTokenがクライアントに保存されない為、displayProductアクションのisTokenValidでは、登録ページに保存されていた古いTokenと、RegistProductActionのsaveTokenで新たに発行されたTokenが比較されるため、検証エラーになっていると思われます。
はぐ
会議室デビュー日: 2008/12/17
投稿数: 4
投稿日時: 2009-02-03 16:37
お返事が大変遅くなりました。申し訳ありません。

tokenのしくみがわかっていなかったので勉強になりました、ありがとうございます。
すると、リレーによって実行されるアクションは、tokenが渡らずチェックにひっかかってしまいますね。。

結局、リレーで実行されるアクションにおいてtokenチェックをしないことで解決しました(tokenチェックをしなきゃいけないアクションではなかったので)。
burton999さん、どうもありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)