FlatServe Transition Check Plugin
0.2

FlatServe Transition Check Plugin API仕様 バージョン0.2

FlatServe Transition Checkプラグインは、FlatServeのHTTPサービスメソッドの実行順序を検査する機能を持つプラグインです。

参照先:
          説明

パッケージ
com.small_it_office.flatserve.transition 遷移チェック機能を利用するためのクラスを提供します。

 

FlatServe Transition Checkプラグインは、FlatServeのHTTPサービスメソッドの実行順序を検査する機能を持つプラグインです。 たとえば、HTTPクライアントがWebブラウザの場合、「戻る」ボタンの操作などによって不正な順序で画面遷移が行われることを 防ぐためのチェックを行うことができます。

遷移チェック

遷移のチェックを行うためには、まず、HTTPサービスメソッドにTokenアノテーションを使って 以下のように定義します。 /

@HttpService
@Token("foo")
public HtmlTextResponse serviceMethod1() {
    ...

このとき、serviceMethod1実行直前に、"foo"というトークンがHTTPセッションオブジェクトに保存されます。 この次のリクエストで実行されるHTTPサービスメソッドserviceMethod2実行時に、 トークン"foo"が保存されている(つまり、serviceMethod1が直前に実行されている)ことを確認するために、 以下のようにAllowedTokensアノテーションで指定します。

@HttpService
@AllowedTokens(tokens = "foo")
@Token("bar")
public HtmlTextResponse serviceMethod2() {
    ...

AllowedTokens.tokens()要素で"foo"を指定することで、serviceMethod2が実行される前に "foo"というトークンが保存されているかどうかがチェックされます。 もし"foo"が保存されていれば、直前にserviceMethod1が実行されたとみなし、正しい遷移と判断します。

serviceMethod2にもTokenアノテーションが指定されているので、この時点で"bar"というトークンが保存されます。 同時に保存されるトークンは一つだけなので、前回保存されたトークン"foo"は破棄されます。 もしこのとき、クライアントのWebブラウザで「戻る」ボタンによってひとつ前の画面のキャッシュを表示し、再びサーバに リクエストを送信してserviceMethod2を実行しようとした場合、この時点で保存されているトークン"bar"が、serviceMethod2の AllowedTokensアノテーションで指定された"foo"に一致しないため、Transition Checkプラグインは、遷移エラーと判断します。 この場合、再びserviceMethod2が実行されることはありません。

AllowedTokensアノテーションでは、完全一致だけではなく前方一致条件も指定できます。また、 複数の条件を指定することもできます。

チェックエラー時のレスポンス

トークンの検査の結果、不正な遷移と判断された場合、Transition Checkプラグインは、 TransitionExceptionをthrowします。例外をthrowするのではなく、 代わりに任意のHTTPレスポンスを返すための後処理を実装することもできます。それには、後処理を WrongTransitionHookインターフェースの実装クラスで実装し、そのインスタンスを TransitionConfigオブジェクトに格納します。 TransitionConfigは、FlatServe初期化時に実行されるcom.small_it_office.flatserve.core.config.ApplicationInitializer の実装クラス内で、Config#setOptionalConfigメソッドでConfigオブジェクトにセットする必要があります。

トークンの保存に関する注意

Transition Checkプラグインは、javax.servlet.http.HttpSessionオブジェクトにトークンを保存します。このため、 Tokenが指定されたメソッドを実行する際に、アプリケーションが意図しなくても HttpSessionオブジェクトが生成されることに留意してください。

Transition Checkプラグインの設定

Transition Checkプラグインの設定は、TransitionConfigオブジェクトで行います。 このオブジェクトをTransition Checkプラグイン設定オブジェクトと呼びます。 ApplicationInitializerの初期化処理で、以下のように設定を行います。

public Config init(ServletConfig servletConfig) {
    TransitionConfig transitionConfig = new TransitionConfig();
    transitionConfig.setHook(new MyHook());
    Config config = new Config();
    config.addOptionalConfig(transitionConfig);
    return config;
}

設定可能な項目についての詳細は、APIドキュメントを参照してください。 また、FlatServeの設定方法の基本については、FlatServeコアモジュールのドキュメントを参照してください。

国際化・地域化

Transition Checkプラグインは、ログメッセージおよび例外メッセージを、リソースバンドルを使って読み込んでいます。 デフォルトで提供されているメッセージは日本語のみですが、 各ロケールに対応したリソースバンドルファイルを作成することで国際化・地域化することができます。

ログ出力メッセージおよび例外メッセージのリソースバンドル名は、flatserve-transitioncheck-messagesです。 JARファイル内にはflatserve-transitioncheck-messages_ja.propertiesファイルが含まれているため、 日本語のメッセージはそのまま利用可能です。 その他の言語で記述されたリソースバンドルファイルを、クラスパスが通ったディレクトリに配置することで国際化・地域化できます。 たとえば、ログや例外のメッセージを英語化する場合は、flatserve-transitioncheck-messages_en.propertiesをクラスパス上に配置します。 実行時のロケールは、FlatServeコアモジュールの設定オブジェクトによって指定できます。 指定しない場合は、実行環境のデフォルトロケールが適用されます。


FlatServe Transition Check Plugin
0.2