0

私のアクションでは、ユーザーが認証されているかどうかに応じて、さまざまなビューをレンダリングしたい(または他のdivのみを表示したい)。

私はこのようなことをする必要があります:

public static Result index() {          
   if (Context.current().request().username().equals("")) {
        // user is NOT authenticated
        return ok(welcome.render());
    } else {
        // user is authenticated
        return ok(dashboard.render());
    }
}

そして、ユーザーがビューで認証されているかどうかを確認するのはどうですか?@ Security.Authenticated(Secured.class)アノテーションを使用できることは知っていますが、条件付きではどうすればよいですか?

4

1 に答える 1

0

あなたが達成しようとしていることに依存します。ユーザーがログインしているかどうかを判断するだけでよい場合は、コントローラークラスで、次のようなものを使用できます。

public static boolean loggedIn() {
        return (session().get("userId") != null);
    }

次に、静的コントローラーのメソッドで、ユーザーがログインしているかどうかを確認します。

if (!loggedIn()) {
            return redirect(routes.Application.login());
        }

セキュアセッションCookieのマップにアクセスできるsession()の使用に注意してください。そこから、ユーザーIDを取得できます。より複雑なロジックを実装したい場合、例えば。ユーザーグループごとに異なるアクションを実行すると、話は異なります。

認証されたユーザーIDを使用してキャッシュ内のいくつかのマップを使用し、セッション内でuserIdを検証します。これは、マップ内にあるかどうかに関係なく、またはユーザーのプロパティ(userRolesのセットなど)を使用して設定することもできます。それに応じて表示されます。これらは私が知っている最も賢明な方法です。

(コントローラーのsession()の使用方法は次のとおりです: ControllerSession

于 2012-07-26T12:01:48.413 に答える