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
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%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% Ich habe einen React
basierten Web-Client und meine Backend-REST-API führt Spring Boot
Ver 1.5.2
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
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: Ссылка
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%Tags und Links java spring spring-mvc spring-security spring-boot