Handhabung der Weiterleitung zu einer bestimmten Seite
-
23-12-2019 - |
Frage
Ich benutze Riegel zur Autorisierung.Ich muss einen Benutzer umleiten, wenn er anwesend ist (subjectPresent
).Dieser Controller rendert beispielsweise die Anmeldeseite:
public static Result signup() {
return ok(signup.render())
}
Wenn ein Benutzer jedoch bereits vorhanden ist (also bereits registriert ist), muss ihn der oben genannte Verantwortliche auf seine Profilseite umleiten: return ok(profilePage.render())
Wie geht das mit Anmerkungen?
Lösung
Deadbolt ist eigentlich nicht für diese Art der bedingten Umschaltung geeignet, aber Sie können es auf folgende Weise hacken:
- Erstellen Sie einen weiteren DeadboltHandler mit einem Namen wie SubjectPresentHandler
- Implementieren Sie die Methode SubjectPresentHandler#onAuthFailure, um zur Profilseite umzuleiten
Kommentieren Sie Ihre Anmeldemethode mit
@SubjectNotPresent(handler=SubjectPresentHandler.class)
Dies führt zu einem Autorisierungsfehler, wenn ein Benutzer vorhanden ist.Dadurch wird SubjectPresentHandler#onAuthFailure aufgerufen, um das Ergebnis zu erhalten.
Persönlich würde ich jedoch darüber nachdenken, innerhalb der Anmeldemethode einen einfachen Test hinzuzufügen, ähnlich wie
public static Result signup() {
Result result;
User user = // however you normally get your user
if (user == null) {
result = ok(signup.render())
} else {
result = redirect(routes.<your profile view method>);
}
return result;
}