ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

F.3.3 予期しない画面からのフォームの送信を検出したい

ブラウザのキャッシュ内の画面が再利用されることにより、予期しないページからリクエストが送信される場合があります。これをApcoordinatorで検出することができます。予期しない画面からのリクエストを検出することを、以降では、リクエストの正当性検査と呼びます。

ブラウザの仕様に依存しますが、以下の場合には再利用された画面からリクエストが送信されることがあります。

リクエストの正当性検査により、上記のようなリクエストが検出できます。

リクエストの正当性検査を有効にすると、Apcoordinatorによって以下の処理が行なわれます。

リクエストの正当性検査を有効にするには、アプリケーションを以下のように作成します。

  1. HttpControlStateProfileクラスを継承して、ユーザ定義のセションクラスを作成します。

  2. すべてのフォームにuji:controlStateタグを追加します。

  3. 予期されないページからのリクエストを検出した場合に実行する処理を追加します。

ユーザ定義のセションクラスを作成する

ユーザ定義のセションクラスをcom.fujitsu.uji.http.HttpControlStateProfileクラスを継承して作成します。また、isPageCheckEnabled メソッドをオーバライドしてtrueを返却するようにします。このメソッドは、リクエストの正当性検査を有効にするかどうかを指定するものです。

public class SampleSession extends com.fujitsu.uji.http.HttpControlStateProfile {
    public boolean isPageCheckEnabled() {
        return true;
    }
}

なお、ユーザ定義のセションクラスを有効にするために、以下の作業が必要になります。具体的な方法は“3.5 ファクトリクラス”を参照してください。

フォームにuji:controlStateタグを追加する

すべてのフォームにuji:controlStateタグを追加します。 1画面に複数のフォームがある場合、全てのフォームにuji:controlStateを記述してください。

<uji:form ...>
   <uji:controlState />
   ...
</uji:form>

予期されないページからのリクエストを検出した場合の処理を追加する

Webアプリケーションが最後に送信した画面以外からリクエストが送信された場合、com.fujitsu.uji.ControlStateExceptionが発生します。この例外をキャッチして処理を実行するには、セションクラスまたはアプリケーションクラスのhandleExceptionメソッドに処理を記述してください。例外が発生すると、handleExceptionメソッドが呼び出されます。

ポイント

サブウィンドウを利用したアプリケーションでリクエストの正当性検査を行う場合は、ウィンドウ制御機能を使ってサブウィンドウの表示を制御してください。また、フレームを利用したアプリケーションの場合は、uji:frameタグを使ってフレームを作成してください。ウィンドウ制御機能やuji:frameタグを使った場合、リクエストの正当性検査は各ウィンドウ、各フレームごとに行われます。
ウィンドウ制御機能やuji:frameタグを使わずにサブウィンドウやフレームを作成し、かつ、リクエストの正当性検査を行う場合は、いずれか一つのウィンドウまたはフレームだけでリクエストの正当性検査を行うことができます。検査を行うウィンドウやフレームにはuji:controlStateタグを記述し、それ以外のウィンドウやフレームに表示されるフォームにはuji:controlStateタグを記述しないでください。

関連項目