Token Session Store Interceptorの使い方
使い方と言っても、TokenInterceptorと殆ど変わらない。
で、何が違うのかというと、通常トランザクションTokenでTokenが違う場合エラーメッセージや他の画面を表示する事になるが、これだと誤って2重ポストをした消費者にはエラー画面が表示され、完了画面にお目にかかる事ができない。
そこで、TokenSessionStoreInterceptorの登場となる。こちらはAction結果のValueStackの内容をToken処理後にSessionに記録してくれ、2重ポストのリクエストが来たときにSessionからValueStackを再構築して、あたかも元々のリクエストのように結果画面を表示してくれる。
これで、2重ポストをしてしまった消費者も目出度く完了画面を見ることができ、表示されている問い合わせ番号をメモすることができる。
ちょっとTIPS:ValueStackをSessionに退避するので、アクションクラスをSerializableにする必要がある。
使い方は struts.xml の token を tokenSession に変えるだけ
<action name="user_add" class="UserAction" method="doAdd"> <interceptor-ref name="tokenSession"> <param name="includeMethods">*</param> </interceptor-ref> <interceptor-ref name="transactauth_chk"/> <result type="redirect-action">user_list</result> <result name="input">/edit.jsp</result> <result name="invalid.token" type="redirect-action">user_new</result> </action>
参考:TokenInterceptorの使い方 - Struts 2+Spring 2+Tiles+Acegi+iBatis+GWT+JUnit 4+JMockit でフルスタックJAVAフレームワーク