Heim >Java >javaLernprogramm >Warum fügt mein Spring Security CORS-Filter den Header „Access-Control-Allow-Origin' nicht hinzu?

Warum fügt mein Spring Security CORS-Filter den Header „Access-Control-Allow-Origin' nicht hinzu?

Linda Hamilton
Linda HamiltonOriginal
2024-11-03 13:26:30399Durchsuche

  Why is My Spring Security CORS Filter Not Adding the 'Access-Control-Allow-Origin' Header?

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:

  • Erstellen Sie eine WebConfig-Klasse, die WebMvcConfigurerAdapter erweitert und die addCorsMappings-Methode implementiert, um zulässige Ursprünge, Methoden und Header zu definieren:
<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>
  • Aktivieren Sie CORS in Ihrer SecurityConfig-Klasse und definieren Sie eine benutzerdefinierte CorsConfigurationSource:
<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:

  • http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll();
  • web.ignoring().antMatchers(HttpMethod.OPTIONS);

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn