Ich habe meinen eigenen Authenticator von Play Framework und DeadboltHandler von Deadbolt implementiert.Play Framework und Deadbolt Redirect onAuthFailure
Mit den Methoden onUnauthorized bzw. onAuthFailure kann ich nicht eingeloggte Benutzer auf die "Login-Seite" anstatt auf die eigentliche Seite, auf die sie zugreifen wollen, schicken.
Anstatt jedoch einen Benutzer direkt auf die "Anmeldeseite" zu senden, möchte ich angeben, auf welcher Seite der Benutzer gesendet werden soll, je nachdem, welche Seite der Benutzer erreichen möchte. Wenn der Benutzer beispielsweise versucht, auf Einstellungen zuzugreifen, sollte der Benutzer zur Anmeldeseite umgeleitet werden. Wenn der Benutzer versucht, auf/player/1 zuzugreifen, sollte der Benutzer auf eine andere Seite umgeleitet werden, beispielsweise die Seite "Benutzer erstellen".
Ich hatte gehofft, dass es eine kluge Möglichkeit gibt, dies mit Anmerkungen zu tun, etwa: @someannotation (redirect = route/id), also kann ich auf die entsprechende Route umleiten, wenn der Benutzer nicht eingeloggt ist Standard "Login-Seite".
Hat jemand irgendwelche Ideen?
Code-Snippet Beispiel für Steuerung und Routenmethode:
@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() {
Code-Snippet Beispiel für 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);
Das sieht aus, was ich brauche, aber es funktioniert nicht ganz für mich, zumindest jetzt nicht. Ich benutze eine ältere Version von Deadbolt (es wird irgendwann aktualisiert) und nehme an, dass deine Antwort für eine spätere (wenn nicht die letzte) Version von Deadbolt ist. Ich erkannte auch, dass du der Autor von Deadbolt bist, großartige Arbeit! :) Die onAuthFailure-Methode von AbstractDeadboltHandler sieht folgendermaßen aus: F.Promise onAuthFailure (Http.Context-Kontext, String-Inhalt). –
Was ich nicht ganz verstehe, ist, dass mein "content" -Parameter immer leer zu sein scheint. Kann ich auch die Annotationen @CustomRestric (Wert = ...) und @SubjectPresent (Inhalt = ...) auf Methodenebene verwenden, und kann ich @DeferredDeadbolt und @SubjectPresent (content = "createuser") auf Controller-Ebene kombinieren ? –
Ich werde meinen Beitrag mit einem Code-Snippet aktualisieren, so dass es einfacher ist zu sehen, was ich meine. (Bitte ignorieren Sie, dass ich syso print verwende: D) –