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/auth
Sie 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 weitergeleitetIch 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.
http://localhost:8080/my-app/inbox/index
App leitet sie weiter zuhttp://localhost:8080/my-app/login/auth
Der 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?