Rain技術情報などを不定期で投稿していきます。Framework前回までで、DBへの書き込みや検索、認証などを解説してきました。今回は、@Security.Authenticatedアノテーションを利用することで、ページへのアクセスを簡単に制御する方法を解説します。前回は、ログイン処理の前提となるユーザー登録画面を実装しました。今回は、いよいよログイン処理を実装していきます。まとめ@Security.Authenticated@Security.Authenticatedアノテーションは、コントローラークラスやメソッドに付与するだけで、認可判定と認可されていなかった場合の処理を共通化してくれる優れものです。これを付与するだけで、メンバーページへのアクセス制限を簡潔に書くことができます。認証判定クラスの実装@Security.Authenticatedアノテーションを使うためには、Security.Authenticatorクラスを継承した認証クラスが必要です。}}getUsernameは、認可判定のメソッドです。ここで何らかのString値を返すと、権限のあるユーザーであると見なされます。ここでは、必ずしもusernameを返す必要はありません。”OK”という文字列や、空文字を返したって構わないのです。(なぜgetUsernameなどという名前にしたのでしょう...)権限ごとに判定クラスを作成する必要はありますが、ここで権限の振り分けを行うことが出来るわけです。onUnauthorizedは、権限のないユーザーがアクセスしようとしたときに呼ばれるメソッドです。悪意を持ったユーザーが認可のないページへアクセスしようとしたことを記録するために、ユーザーの情報をログに残したりする事も出来ます。アノテーションを付与するアノテーションは、クラスかメソッドのいずれかに付与することができます。メソッドに付与するとそのメソッドだけですが、クラスに付与することで配下のメソッド全てに認証機能を追加することができます。実際にやってみる今回は、会員専用ページとしてmember.scala.htmlと、管理者専用ページとしてadmin.scala.htmlを新たに作成します。html><h1>ここは会員専用ページです。html><h1>ここは管理者専用ページです!</h1>セッションへ入れる値を追加する今回は、adminかどうかの判別にuserNameを利用しますので、LoginControllerの変更が必要です。前回は、ログイン処理の前提となるユーザー登録画面を実装しました。今回は、いよいよログイン処理を実装していきます。09:49controllers.LoginControllersetSessionメソッドを変更します。}Authenticatorを定義する会員ロールと管理者ロールのgetUsernameメソッドを定義します。認証失敗時に飛ばしたいところは同じですが、管理者ページへのアクセス失敗時は、IPアドレスをログに記録するようにしましょう。authenticator.MemberAuthenticator.javaこちらは、セッションからidが取得出来れば、権限があると判断します。}}authenticator.AdminAuthenticator.javaこちらは、ユーザー名がadminであれば権限があるとします。}}コントローラーを定義する今回は、コントローラークラスを権限ごとに分けてみましょう。}}権限ごとに分けたので、クラスへ付与することで全てのメソッドを保護することができました。routesを記述するroutesも忘れてはいけません。controllers.MemberController.indexテストする会員登録ページで、ユーザー名をadminとして登録し、adminページとmemberページへアクセスできることを確認します。その他のユーザー名でログインして、adminページにアクセス出来ないことと、不正アクセス試行のログが出力されることを確認します。まとめこのように、PlayFrameworkでは、アノテーションを付与するだけで、メソッドへのアクセス制限を容易に行うことが出来ます。非常に読みやすく、簡単なので、積極的に使っていきたいですね。今回は、PlayFramework2.5で、簡易的なユーザー登録画面を実装します。2.5】Ebeanでフィールドを継承する方法EbeanORMは、クラスにフィールドを定義すれば自動的にテーブルを作成したり書き換えてくれたりする便利なものです。前回は、ログイン処理の前提となるユーザー登録画面を実装しました。今回は、いよいよログイン処理を実装していきます。Frameworkでは、EbeanというORMライブラリが利用できます。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。