Apcoordinator ユーザーズガイド |
目次
![]() ![]() |
第3部 Webアプリケーションの開発 | > 第17章 APIを使ったプログラミング | > 17.1 セション管理 |
ボタンのダブルクリック等で2重にリクエストが送信された場合でも不当なリクエストと判定される場合があります。
1) セションクラスをHttpControlStateProfile
から継承します。HttpControlStateProfile
クラスについては、高度なセション管理を参照してください。
2) HttpControlStateProfile
クラスのisPageCheckEnabled
メソッドをオーバライドしてtrue
を復帰するようにします。
public boolean isPageCheckEnabled() { return true; }
サーバが最後に送信したページ以外からのリクエストの場合は、ControlStateException
がスローされます。 これを判定して別の処理をする場合はセションクラスまたはアプリケーションクラスのhandleException
メソッドに記述します。
セション開始前または破棄後の場合、本機能は無効となります。
以下の図は、画面3からリクエストが送信された場合に実行されるビジネスクラスのメソッドが、画面1から送信されたリクエストによって実行されてしまう例です。
Webcoordinatorは、リクエストからコマンド名(![]()
uji.verb
)と入力データBean情報(uji.bean
またはuji.id
)を取得し、コマンドマップを参照してビジネスクラスのメソッドを呼び出します。リクエストの正当性検証機能では、これらの情報を用いて不当な画面から送信されたリクエストを検出します。
IllegalRequestException
がスローされます。
これを判定して別の処理をする場合はセションクラスまたはアプリケーションクラスのhandleException
メソッドに記述します。
1) セションクラスをHttpControlStateProfile
から継承します。HttpControlStateProfile
クラスについては、高度なセション管理を参照してください。
2) HttpControlStateProfile
クラスのisRequestCheckEnabled
メソッドをオーバライドしてtrue
を復帰するようにします。
3) 入力フォームに使用するタグによって以下のとおり異なります。
public boolean isRequestCheckEnabled() { return true; }
3-2) HTMLのFORMタグを使用する場合上記では、フォームから発生するコマンド一覧として「button1,button2」を指定しています。
<uji:form name="myform" verbs="button1,button2" beanId="body"> .... <INPUT TYPE="SUBMIT" NAME="button1" VALUE="ボタン1"> <INPUT TYPE="SUBMIT" NAME="button2" VALUE="ボタン2"> </uji:form>
HttpControlStateProfile
クラスのaddNextCommands
メソッドを使用して、ウィンドウ名、コマンド名(uji.verb
)および入力データBean情報(uji.bean
またはuji.id
)を設定します。
addNextCommandsメソッドの詳細は、APIリファレンスを参照してください。
以下のような入出力ページを使用している場合も、上記では、ウィンドウ名「winName」、
package sample; import com.fujitsu.uji.http.HttpDispatchContext; public void someHandler(DispatchContext context, sample.MyDataBean dataBean) { SampleSession session = (SampleSession)context.getSessionProfile(); String[] commends = {"button1", "button2"}; session.addNextCommands((HttpDispatchContext)context, "winName", "subBody", null, commends); ... }
uji.id
の値「subBody」、コマンド名「button1」と「button2」を指定しています。
addNextCommands
メソッドを使用してウィンドウ名、コマンド名(uji.verb
)および入力データBean情報(uji.bean
またはuji.id
)を設定する必要があります。
uji:form
タグとHTMLのFORM
タグを混在して使用している。uji:form
タグで指定された情報にaddNextCommands
メソッドで設定したウィンドウ名、コマンド名(uji.verb
)および入力データBean情報(uji.bean
またはuji.id
)が追加されます。
FORM
タグを使用している。
uji:anchor
タグをフォーム指定モードで使用し、form
アトリビュートでHTMLのFORM
タグのフォーム名を指定している。
FORM
タグを使用している画面が存在している。
リクエストの正当性検証機能を利用する場合の注意事項は以下のとおりです。
- セション開始前、セション破棄後またはセションタイムアウト後の場合、本機能は無効となります。
- リクエストの正当性検証機能とページチェック機能の組み合わせで、ブラウザの戻るボタンやキャッシュ内の画面からのリクエストが送信された場合の動作を以下に示します。
リクエストの正当性検証機能 ページチェック機能 動作 有効 有効 リクエストの正当性検証機能とページチェック機能の併用ができます。検証順は以下のとおりです。
- ページチェック機能
- リクエストの正当性検証機能
無効 リクエストの正当性検証機能が有効になります。 無効 有効 ページチェック機能が有効になります。 無効 リクエストの検証をおこないません。リクエストの正当性検証機能、ページチェック機能とも無効になります。
- タイムアウト後の画面からリクエストが送信された場合でも例外(
IllegalRequestException
)が発生します。
目次
![]() ![]() |