0

これはJava Playからのフォローアップです。2 - Cookie によるユーザー管理

zentask の例から

    public class Secured extends Security.Authenticator {

        @Override
        public String getUsername(Context ctx) {
            return ctx.session().get("email");
        }

        @Override
        public Result onUnauthorized(Context ctx) {
            return redirect(routes.Application.login());
        }

        // Access rights

        public static boolean isMemberOf(Long project) {
            return Project.isMember(
                project,
                Context.current().request().username()
            );
        }

        public static boolean isOwnerOf(Long task) {
            return Task.isOwner(
                task,
                Context.current().request().username()
            );
        }


}

私にとって、これは本当に意味がありません。

ユーザーは次の Cookie を取得します。たとえば、「email=test@test.com」

「保護された」ページに移動すると、zentask は電子メールが null でないかどうかのみをチェックします。これはどのように安全であることができますか?

セッションの理由は、データベースから負荷を取り除くことです。しかし、このアプローチでは、ユーザーが保護されたページに対する権限を持っているかどうかを常に確認する必要があります。

私にとって、それは本当に意味がありません。関数 getUsername があるのはなぜですか? また、戻り値の型が文字列なのはなぜですか?

私はこのようなことをしたい:

  • ユーザーがログインして、「value=randomString」のような Cookie を取得します。

  • たとえば、キャッシュ内のユーザー OBJECT を保護しますCache.set(randomstring,userObject);

  • 訪問者が戻ってきたら、ランダム文字列がキャッシュにあるかどうかを確認し、キャッシュ内の User オブジェクトが保護されたページにアクセスする権利を持っているかどうかを確認します。

@Security.Authenticated() アノテーションなしで、これを達成できました。

この注釈でこれを達成することは可能ですか?

4

1 に答える 1

3

それはただの、sample他には何もありません。メールを Cookie に保存する必要はありません。たとえば、ログに記録されたユーザーを識別するためにハッシュを保存したり、他のマッチングを行ったりすることができます。

サンプルは可能な限りシンプルにしていますが、より洗練されたシナリオに変更することは開発者側の責任です。

ところで、もちろん Play のすべての Cookie は署名されており、手動で変更できるかどうかは本当に疑問です。

于 2012-08-06T06:04:37.273 に答える