DeadboltからPlay FrameworkとDeadboltHandlerから独自のAuthenticatorを実装しました。Play FrameworkとDeadbolt redirect onAuthFailure
認証されていないそれぞれのonAuthFailureのメソッドを使用して、ログインしようとしている実際のページの代わりにログインページにログインしていないユーザーを送信できます。
しかし、「ログインページ」に直接ユーザーを送信する代わりに、ユーザーがどのページに到達しようとしているかによってユーザーに送信するページを指定する必要があります。たとえば、ユーザーが/設定にアクセスしようとすると、ユーザーはログインページにリダイレクトされます。ユーザーが/ player/1にアクセスしようとすると、ユーザーは別のページにリダイレクトする必要があります。たとえば、「ユーザーを作成」ページです。
私はアノテーションでこれを行うためのスマートな方法があると期待していました。@someannotation(redirect = route/id)のように、ユーザーがログインしていなければ関連するルートにリダイレクトできます。標準的な "ログインページ"。
いずれかのアイデアがありますか?
コードは、コントローラとルートメソッドの例をスニペット:
@Security.Authenticated(Secured.class)
@SubjectPresent(content = "createuser")
@DeferredDeadbolt
public class Settings extends Controller {
@SubjectPresent(content = "login")
@CustomRestrict(value = { @RoleGroup({ UserRole.player}), @RoleGroup(UserRole.server_owner) })
public static Result settings() {
コードDeadboltHandler onAuthFailureのための例をスニペット:あなたがこれを行うことができますいくつかの異なる方法があります
@Override
public F.Promise<Result> onAuthFailure(Http.Context context, String content) {
return F.Promise.promise(new F.Function0<Result>() {
@Override
public Result apply() throws Throwable {
System.out.println(content);
これは私が必要とするように見えますが、今は少なくとも私にとってはうまくいきません。私は古いバージョンのDeadboltを使用しています(それはある時点でアップグレードされます)、あなたの答えはDeadboltの最新版ではないにしても、それが後であると仮定します。私はあなたがDeadboltの作者であることにも気づきました。 :) AbstractDeadboltHandlerのonAuthFailureメソッドは、次のようになります。F.Promise onAuthFailure(Http.Context context、String content)。 –
私が得意でないのは、私の「コンテンツ」パラメータが常に空になっているようだということです。また、@CustomRestric(value = ...)と@SubjectPresent(content = ...)というアノテーションをメソッドレベルで使用することはできますか?コントローラレベルで@DeferredDeadboltと@SubjectPresent(content = "createuser")を組み合わせることはできますか? ? –
ポストをコードスニペットで更新して、意味を理解しやすくします。 (私はsysoプリントを使用していることを無視してください:D) –