Spring Boot Sicherheit CORS

7

Ich habe ein Problem mit dem CORS-Filter auf URLs der Federsicherheit. Es setzt Access-Control-Allow-Origin und andere exponierte Header nicht auf URLs, die Spring sec (Login / Logout) angehören oder von Spring Security gefiltert werden.

Hier sind die Konfigurationen.

CORS:

%Vor%

Sicherheit:

%Vor%

Also, wenn ich eine Anfrage an die URLs mache, die nicht von der Sicherheit angehört werden, werden CORS-Header gesetzt. Spring-Sicherheits-URLs - nicht festgelegt.

Spring boot 1.4.1

    
user1935987 27.10.2016, 13:56
quelle

5 Antworten

10

Anstatt CorsRegistry zu verwenden, können Sie Ihren eigenen CorsFilter schreiben und ihn Ihrer Sicherheitskonfiguration hinzufügen.

Benutzerdefinierte CorsFilter-Klasse:

%Vor%

Sicherheitskonfigurationsklasse:

%Vor%     
mika 28.10.2016, 07:42
quelle
7

Option 1 (WebMvcConfigurer-Bean verwenden):

Die CORS-Konfiguration, mit der Sie begonnen haben, ist mit Spring Boot nicht die richtige Methode. Sie müssen eine WebMvcConfigurer Bean registrieren. Referenz hier .

Beispiel einer Spring Boot CORS-Konfiguration:

%Vor%

Dadurch wird die CORS-Konfiguration für eine Spring Spring-Startanwendung (ohne Sicherheitsstart) bereitgestellt. Beachten Sie, dass die CORS-Unterstützung unabhängig von Spring Security existiert.

Sobald Sie Spring Security eingeführt haben, müssen Sie CORS mit Ihrer Sicherheitskonfiguration registrieren. Spring Security ist intelligent genug, um Ihre bestehende CORS-Konfiguration zu übernehmen.

%Vor%

Option 2 (CorsConfigurationSource-Bean verwenden):

Die erste Option, die ich beschrieben habe, ist wirklich aus der Perspektive des Hinzufügens von Spring Security zu einer bestehenden Anwendung. Wenn Sie Spring Security von Anfang an hinzufügen, wird die in Spring Security Docs beinhaltet das Hinzufügen einer CorsConfigurationSource-Bean.

%Vor%     
quelle
1

Ich habe einen React basierten Web-Client und meine Backend-REST-API führt Spring Boot Ver 1.5.2

aus

Ich wollte CORS für alle Controller-Routenanforderungen von meinem Client, der auf localhost:8080 läuft, schnell aktivieren. Innerhalb meiner Sicherheitskonfiguration habe ich einfach eine @Bean vom Typ FilterRegistrationBean hinzugefügt und es funktioniert einfach.

Hier ist der Code:

%Vor%

Sie können die Spring Boot Dokumente hier aufrufen

    
sisanared 21.04.2017 14:39
quelle
0

Derzeit sind die OPTIONS-Anfragen standardmäßig blockiert, wenn die Sicherheit aktiviert ist.

Fügen Sie einfach eine zusätzliche Bean hinzu und Preflight-Anfragen werden korrekt behandelt:

%Vor%

Bitte beachten Sie, dass dies je nach Anwendung möglicherweise zu potenziellen Exploits führt.

Geöffnetes Problem für eine bessere Lösung: Ссылка

    
Dennis Kieselhorst 10.07.2017 12:37
quelle
0

Das könntest du auch mit einem Interceptor erreichen.

Verwenden Sie die Ausnahme, um sicherzustellen, dass Sie den Lebenszyklus der Anforderung beenden:

%Vor%

Setzen Sie dann in Ihrem Interceptor Header für alle OPTIONS-Anfragen und werfen Sie die Ausnahme:

%Vor%

Zum Schluss wenden Sie den Interceptor auf alle Routen an:

%Vor%     
Jason Fitzpatrick 05.10.2017 13:03
quelle