Grails Spring Security: Wenn Sie sich mit einer Ziel-URL anmelden, wird der Workflow nach der Authentifizierung übersprungen

In meiner Grails-App habe ich den Workflow für die Nachautorisierung angepasst, indem ich einen benutzerdefinierten Auth Success-Handler (in resources.groovy) geschrieben habe (siehe unten).

authenticationSuccessHandler (MyAuthSuccessHandler) {
    def conf = SpringSecurityUtils.securityConfig
    requestCache = ref('requestCache')
    defaultTargetUrl = conf.successHandler.defaultTargetUrl
    alwaysUseDefaultTargetUrl = conf.successHandler.alwaysUseDefault
    targetUrlParameter = conf.successHandler.targetUrlParameter
    useReferer = conf.successHandler.useReferer
    redirectStrategy = ref('redirectStrategy')
    superAdminUrl = "/admin/processSuperAdminLogin"
    adminUrl = "/admin/processAdminLogin"
    userUrl = "/admin/processUserLogin"
}

Wie Sie aus den letzten drei Zeilen im obigen Abschnitt ersehen können, leite ich sie in Abhängigkeit von der Rolle, die der angemeldeten Benutzerin zugewiesen wurde, zu separaten Aktionen in der umAdminController Hier wird eine benutzerdefinierte UserSessionBean erstellt und in der Sitzung gespeichert.

Es funktioniert gut für einen regulären Login-Fall, der in meiner App so aussieht:

Der Benutzer gelangt entweder über die Apphttp://localhost:8080/my-app/ ODERhttp://localhost:8080/my-app/login/authSie gibt ihre gültige Login-ID und ihr Passwort ein und fährt fort.Die App greift intern auf MyAuthSuccessHandler zu, der unter Berücksichtigung der diesem Benutzer zugewiesenen Rolle zu AdminController umleitet.Das UserSessionBean wird erstellt und in der Sitzung gespeichertDer Benutzer wird zur Startseite der App weitergeleitet

Ich habe auch einen Brauch geschriebenMyUserDetailsService durch verlängernGormUserDetailsService auf die im obigen Ablauf korrekt zugegriffen wird.

PROBLEMSZENARIO:
Stellen Sie sich einen Benutzer vor, der direkt auf eine geschützte Ressource zugreift (in diesem Fall ist die Steuerung mit gesichert)@Secured Anmerkung) innerhalb der App.

Benutzer klickthttp://localhost:8080/my-app/inbox/indexApp leitet sie weiter zuhttp://localhost:8080/my-app/login/authDer Benutzer gibt seine gültige Login-ID und sein Passwort einBenutzer wird zu geleitethttp://localhost:8080/my-app/inbox/index

DasMyAuthSuccessHandler wird bei diesem Vorgang gänzlich übersprungen und somit meinUserSessionBean wird nicht erzeugt, was zu Fehlern bei der weiteren Verwendung an Orten führt, an denen dieUserSessionBean zugegriffen wird.

FRAGEN:

Überspringt die App im Problemszenario dieMyAuthSuccessHandler weil es eine Ziel-URL gibt, zu der sie beim Anmelden umgeleitet werden kann?Können wir den Prozess zwingen, immer durchzugehen?MyAuthSuccessHandler auch mit der Ziel-URL vorhanden?Wenn die Antwort auf 2 Nein lautet, gibt es eine Alternative dazu, wie und wo dieUserSessionBean kann noch erstellt werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage