Ist Acegi / Frühjahr Sicherheitsunterstützung getUserPrincipal ()?
-
10-07-2019 - |
Frage
Ich brauche eine bestehende Anwendung mit Acegi / Frühjahr Sicherheit zu verbinden.
Um loszulegen ich für ein einfaches Stück Information suchen: in diesem Zusammenhang wird HttpServletRequest.getUserPrincipal () aufgerufen aus meiner Anwendung ordnungsgemäß die Benutzername durch Feder erhalten zurückzukehren (im Gegensatz zu mit Spring spezifischen Objekten gegen)? Ich habe auf diesen Informationen gegoogelt Konflikt zu geraten.
Ich gehe davon aus, dass, wenn Acegi mit Filter implementiert ist, es in der Lage ist, das Servlet-API getUserPrincipal () zu überlasten, nicht wahr?
Untergeordnete Frage: Wenn diese nicht standardmäßig der Fall ist, ist es eine Möglichkeit, um es zu aktivieren
?Danke,
-Erik
Lösung
Wie schon in früheren Benutzer Antwort hat, Federsicherheitsunterstützung der getUserPrincipal und isUserInRole. Hier ist, wie Frühling Sicherheit tut es.
Wenn Sie Feder konfigurieren, kann es die folgenden Filter laden:
Im Rahmen der Standardfilterkonfiguration die SecurityContextHolderAwareRequestFilter
Filter geladen wird.
Die Untersuchung der Filter @ https://fisheye.springsource.org/browse/spring-security/tags/spring-security-parent-2.0.4/core/ src / main / java / org / spring / security / Wrapper / SecurityContextHolderAwareRequestFilter.java? r = 2.514
Sie können sehen, es wickelt und ändert das HttpServletRequest
Objekt in der SecurityContextHolderAwareRequestWrapper
Klasse, die HttpServletRequestWrapper
erstreckt, die HttpServletRequest
implementiert und ihn an die Standard-Servlet-Filter doFilter Kette zurück. Seit dem Frühjahr Sicherheitsfilter sollte als das erste Filter konfiguriert werden, werden alle nachfolgenden Klassen werden die SecurityContextHolderAwareRequestWrapper
stattdessen sehen. Dazu gehört JSP-Seiten oder Servlets hinter diesem Filter.
Wenn Sie einen Anruf tätigen hinter diesem Filter isUserInRole
oder getUserPrincipal
von der JSP-Seite, Servlets oder einem Rahmen, es ist der Aufruf der HttpServletRequest
Implementierung von Spring Security.
Andere Tipps
Wenn Sie die Sicherheitsfilter verwenden, ja es tut. Ich glaube, dies ist das Standardverhalten.
Genau die Klasse, Sie bekommen von Ihrer Konfiguration abhängig zurück, aber sie alle Hauptschnittstelle über Spring eigene org.springframework.security.Authentication-Schnittstelle implementieren, die es erweitert.
Ich habe request.getUserPrincipal () und request.isUserInRole () in einer Frühlings-Anwendung verwendet und es funktioniert nahtlos, auch innerhalb JSPs.
Ich glaube, dass Spring Security speichert diese Informationen in der Security und nicht obwohl in der Anfrage. Man könnte leicht einen FilterSecurityInterceptor schreiben, die diese Informationen auf die Anforderung konfiguriert werden kann, auch hinzuzufügen.