Spring Security: Greifen Sie auf den aktuellen authentifizierten Benutzer in einem Servlet-Filter zu

8

Ich habe kürzlich angefangen, über Spring Security zu lernen, und heute bin ich auf diese grundlegende (glaube ich) Frage gestoßen: Warum kann ich nicht auf den aktuellen Principal innerhalb eines Servlet-Filters zugreifen, wie in der folgenden Klasse gezeigt:

%Vor%

Das mit Authentifizierung abgerufene Authentifizierungsobjekt auth = securityContext.getAuthentication (); ist null. Bei Verwendung des obigen Snippets funktioniert ein MVC @Controller problemlos (wie erwartet).

Warum passiert das?

    
dimi 30.09.2014, 17:23
quelle

4 Antworten

16

in doFilter :

%Vor%

Hoffe, das hilft

    
Vipul Paralikar 01.10.2014, 06:01
quelle
3

Das folgende Snippet funktioniert und bietet eine Principal -Instanz:

%Vor%     
Shimakaze 18.03.2016 16:58
quelle
2

Sie können hier , dass der Sicherheitsfilter an erster Stelle stehen muss, um auf den SecurityContext zugreifen zu können.

Wenn Sie fragen, wie es geht, hängt es von der Art ab, wie Sie Ihre Webanwendung konfiguriert haben. In meinem Fall verwende ich Spring-Boot, basierend auf dem Servlet-3-Konfigurationsstil und Spring-Kontext-Konfiguration in Java (kein XML) Also sieht meine Konfiguration so aus:

%Vor%

Beachten Sie, dass Sie durch Festlegen der Reihenfolge die Filterreihenfolge steuern können.

    
Modi 01.10.2014 05:01
quelle
2

Der gute alte web.xml Deployment Deskriptor ist eine einfache Möglichkeit, die Reihenfolge der Filter zu bestimmen. Aus der Servlet 3.0-Spezifikation: Die Reihenfolge, die der Container beim Erstellen der Filterkette verwendet, die für a bestimmte Anfrage-URI ist wie folgt:

  1. Zuerst werden die übereinstimmenden Filterzuordnungen in derselben Reihenfolge wie diese angezeigt Elemente erscheinen im Deployment-Deskriptor.
  2. Als nächstes werden die passenden Filterzuordnungen in derselben Reihenfolge wie diese angezeigt Elemente erscheinen im Deployment-Deskriptor.

Kurz gesagt, Sie müssen den Filter <filter-mapping> für Sie nach dem für Spring security einfügen.

Auch aus dem gleichen Spezifikationsdokument: Wenn die Reihenfolge, in der die Listener, Servlets, Filter aufgerufen werden, wichtig ist für Anwendung muss dann ein Deployment Deskriptor verwendet werden.

    
Serge Ballesta 01.10.2014 08:46
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer26455203 ___

Versuchen Sie es mit Shenzhen mit itunesconnect-Option:

%Vor%

Im Falle von Jenkins wäre das der Typ "Execute Shell" des Build-Schritts.

    
___ answer29583386 ___

oder Sie können altool verwenden: /Applications/Xcode.app/Contents/Applications/Application \ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool

Verwendung:

%Vor%     
___ qstntxt ___

Ich versuche zu verstehen, wie ich meinen aktuellen Workflow mit der Integration von Apple TestFlight in iTunes Connect implementieren kann.

Gegenwärtig habe ich einen Jenkins Continuous Integration Server, der jedes Mal, wenn jemand in github wechselt, einen neuen Build für TestFlight kompiliert und hochlädt.

Soweit ich sehen kann, gibt es für iTunes Connect keine offizielle Befehlszeilen-API zum Hochladen neuer Builds.

Ich kann es mir nicht leisten, jedes Mal, wenn ich einen Code ändere, 10 Apps manuell zu kompilieren und hochzuladen.

Wie kann ich diesen Workflow mit den vorhandenen Tools und iTunes Connect implementieren? (Jenkins, Bots, xcodebuild, Anwendungslader, etc ...)

    
___ tag123itunesconnect ___ iTunes Connect ist eine Suite webbasierter Tools zum Verwalten von Inhalten, die im iTunes Store, im App Store, im Mac App Store und im iBooks Store verkauft werden. Als Mitglied des iOS-Entwicklerprogramms oder des Mac-Entwicklerprogramms verwenden Sie dieses Tool zum Verwalten von Apps, Vereinbarungen, Steuer- und Bankinformationen, Verkaufsberichten und mehr. ___ tag123jenkins ___ Jenkins ist ein Open-Source-Tool für die kontinuierliche Integration, das in Java geschrieben wurde und Pakete für Linux, Mac OS X, Windows, FreeBSD und OpenBSD enthält. Das Projekt wurde von Hudson abgezweigt. ___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___ tag123testflight ___ TestFlight war ein Entwicklertool von Apple, mit dem iOS-Builds drahtlos an Beta-Tester verteilt werden können. Der Dienst wurde am 26. Februar 2015 beendet und die Funktionalität wird jetzt von iTunes Connect bereitgestellt. iTunes Connect, TestFlight und Jenkins ___ answer30145013 ___

Sie können testflight für einen sehr einfachen Upload Ihrer %code% -Datei auf Apple TestFlight verwenden. Der Vorteil von %code% über %code% ist, dass %code% den neuen Build für Tester tatsächlich aktiviert.

    
___