Ich habe ein Szenario, in dem ich versuche, Spring Safety mit Jersey für meine REST API zu kombinieren.
Mein Bedürfnis ist ziemlich kompliziert (denke ich) und es ist wie folgt:
Spring security wird verwendet, um URLs abzufangen und die Basisauthentifizierung zu erzwingen, um auf eine REST-Ressource zuzugreifen. Dies scheint in Ordnung zu sein, da ich HTTP-Client verwende, um dies zu testen.
Allerdings möchte ich irgendwie auf das Benutzerobjekt zugreifen, das geladen wird, um einige zusätzliche Berechtigungen zu überprüfen, die den Benutzer hängen lassen (ein Kartenobjekt mit booleschen Flags, um anzuzeigen, ob Objekteigenschaften sichtbar sind oder nicht). Der Code, der das Laden funktioniert, aber nachdem Frühling authentifiziert, wie greife ich dann auf das Benutzerobjekt in der tatsächlichen REST-Ressourcenmethode selbst zu? Ist das möglich?
Die Schritte sind also:
1) Client führt einen REST-API-Aufruf durch 2) Spring intercepts URL überprüft den Benutzernamen und das Passwort, die im http-Header angegeben sind 3) Auf die Ressourcenressource-Methode wird dann zugegriffen, wenn gültige Berechtigungsnachweise vorhanden sind
Aber vor Schritt 3 möchte ich irgendwie das geladene User-Objekt an die eigentliche Resource-Methode selbst weitergeben, damit ich etwas Logik anwenden kann, um einzuschränken, was der Benutzer aufgrund der Berechtigungen sehen kann, die ich geladen habe ??? Ist das möglich? Ich glaube, ich habe irgendwo Code gesehen, der nach Benutzerrollen sucht, bevor auf eine Methode mit Spring und REST zugegriffen wird, aber wenn jemand irgendwelche Links oder Ideen hat, die ausgezeichnet wären.
Bitte helfen Sie, wenn Sie können. Vielen Dank.
Ich habe das gelöst, indem ich einen Request-Scoped-Proxy verwendet habe, der von einer Bean-Factory erstellt wurde.
Dies ermöglicht es Ihnen, Ihren aktuell authentifizierten Benutzer einfach in jede federgeführte Bean zu injizieren, und in meinem Fall fielen meine Jersey-Ressourcen in diese Kategorie. Ich habe meinen Benutzer in die Ebene unterhalb der Ressourcen injiziert, aber es ist alles gleich.
Jemand anderes hat hier die komplette Lösung elegant gebloggt.
Tags und Links rest jersey spring-security