Spring Security CORS-Filter: Fehlerbehebung beim 401-Fehler
Obwohl Sie Spring Security in Ihrem bestehenden Projekt implementiert haben, stoßen Sie weiterhin auf ein 401 „Nein“ „Access-Control-Allow-Origin“-Header-Fehler von Ihrem Server. Dies liegt daran, dass der Antwort kein solcher Header angehängt ist.
Um dieses Problem zu beheben, haben Sie versucht, der Filterkette vor dem Abmeldefilter einen benutzerdefinierten Filter hinzuzufügen. Es scheint jedoch, dass der Filter nicht auf Ihre Anfragen angewendet wird. Lassen Sie uns Ihre bestehende Konfiguration und potenzielle Probleme untersuchen:
Sicherheitskonfiguration:
Die Sicherheitskonfiguration verwendet die CORS-Konfiguration, die korrekt konfiguriert ist. Es ist jedoch wichtig zu beachten, dass die @CrossOrigin-Annotation in Ihrem Controller mit dieser Konfiguration in Konflikt geraten kann, was zu unvorhersehbarem Verhalten führen kann.
Filterimplementierung:
Ihr Filter scheint dies zu tun ordnungsgemäß als OncePerRequestFilter konfiguriert sein. Es definiert die notwendigen Methoden für den Filterbetrieb, einschließlich des Hinzufügens von CORS-Headern zur Antwort.
Filterregistrierung:
Ihr Filter wird über Spring Boot registriert, was bestätigt wird durch den Protokolleintrag. Der Filter ist „/*“ zugeordnet und seine Position in der Filterkette ist angemessen.
Generierte Filterkette:
Die generierte Filterkettenausgabe zeigt an, dass Ihr CORS Filter fehlt in der Liste. Dies erklärt möglicherweise, warum es nicht wirksam wird.
Antwortheader:
Sie haben nicht die vollständigen Antwortheader bereitgestellt, die Sie vom Server erhalten haben. Die Untersuchung dieser Header würde Einblicke in die tatsächlich in der Antwort vorhandenen CORS-Header bieten.
Edit 1:
Die von @Piotr Sołtysiak vorgeschlagene Lösung wurde versucht, aber es war auch so Das Problem konnte nicht behoben werden. Der CORS-Filter fehlte in der generierten Filterkette und der Fehler 401 blieb bestehen.
Lösung:
In Spring Security 4.1 und höher hat sich die Implementierung der CORS-Unterstützung geändert. Der bevorzugte Ansatz ist die Verwendung der folgenden Konfigurationen:
<code class="java">@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH"); } }</code>
<code class="java">@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors(); } @Bean public CorsConfigurationSource corsConfigurationSource() { // ... (Define the CORS configuration and return a UrlBasedCorsConfigurationSource) } }</code>
Vermeiden Sie die folgenden falschen Ansätze:
Diese Methoden sind veraltet und stellen eine unvollständige CORS-Implementierung bereit.
Das obige ist der detaillierte Inhalt vonWarum fügt mein Spring Security CORS-Filter den Header „Access-Control-Allow-Origin' nicht hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!