アクションに事前処理をつけたい
Play Framework(Java)で用意されているアノテーションの中に、
Controllerクラスやそのアクションを行うメソッドに付加しておくことで
事前処理を簡単に行う事ができるものが用意されています。
ユースケースとしては、
- ログイン状態のチェック
- ユーザ毎アクセス権限のチェック
などが挙げられます。
事前処理の実装
BeforeAction.java
public class BeforeAction extends play.mvc.Action.Simple {
@Override
public F.Promise<Result> call(Http.Context ctx) throws Throwable {
System.out.println("事前処理を行います。");
return delegate.call(ctx);
}
}
call
メソッドはアノテーションを付与したActionの直前に必ず呼ばれます。
ここで、必ずPromise
型を返却する必要があります。
BeforeAction
はplay.mvc.Action.Simple
を継承しているので、
Action
型のメンバ変数であるdelegate
のcallメソッドを呼び、
Promise
を返却する事でもとのActionの処理をそのまま呼び出す事が可能です。
事前処理を行うメソッドにアノテーションを付与
@With
というアノテーションを付与する事で、
そのクラスまたはメソッドに事前処理を挟み込む事ができます。
以下のように記述する事で、上で実装したBeforeAction#call
の処理を
事前処理として行います。
コントローラ
@With(BeforeAction.class) //これ
public static Result index() {
System.out.println("indexメソッドが呼ばれました。");
return ok("hello");
}
標準出力
事前処理を行います。
indexメソッドが呼ばれました。
まとめ
With
アノテーションとplay.mvc.Action.Simple
を継承したクラスを駆使する事で、
それぞれのアクションに対しログインなどの認証チェックや事前処理を簡単に挟み込む事ができます。
With
アノテーションには複数の事前処理を定義する事もできるので
うまく利用してPlayFrameworkでの開発を便利に・加速させましょう。