Maison >Java >javaDidacticiel >Pourquoi mon filtre CORS Spring Security n'ajoute-t-il pas l'en-tête \'Access-Control-Allow-Origin\' ?

Pourquoi mon filtre CORS Spring Security n'ajoute-t-il pas l'en-tête \'Access-Control-Allow-Origin\' ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 13:26:30399parcourir

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

Filtre CORS Spring Security : Dépannage de l'erreur 401

Malgré l'implémentation de Spring Security dans votre projet existant, vous continuez à rencontrer un 401 "Non" Erreur d'en-tête Access-Control-Allow-Origin' de votre serveur. Cela se produit car aucun en-tête de ce type n'est attaché à la réponse.

Pour résoudre ce problème, vous avez tenté d'ajouter un filtre personnalisé à la chaîne de filtres avant le filtre de déconnexion. Cependant, il semble que le filtre ne s'applique pas à vos demandes. Examinons votre configuration existante et les problèmes potentiels :

Configuration de sécurité :

La configuration de sécurité utilise la configuration CORS, qui est configurée correctement. Cependant, il est important de noter que l'annotation @CrossOrigin dans votre contrôleur peut entrer en conflit avec cette configuration, entraînant un comportement imprévisible.

Implémentation du filtre :

Votre filtre semble être configuré correctement en tant que OncePerRequestFilter. Il définit les méthodes nécessaires au fonctionnement du filtre, y compris l'ajout d'en-têtes CORS à la réponse.

Enregistrement du filtre :

Votre filtre est en cours d'enregistrement via Spring Boot, qui est confirmé par l'entrée du journal. Le filtre est mappé sur "/*" et sa position dans la chaîne de filtres est appropriée.

Chaîne de filtres générée :

La sortie de la chaîne de filtres générée indique que votre CORS le filtre est absent de la liste. Cela peut expliquer pourquoi cela ne prend pas effet.

En-têtes de réponse :

Vous n'avez pas fourni les en-têtes de réponse complets reçus du serveur. L'examen de ces en-têtes offrirait un aperçu des en-têtes CORS réels présents dans la réponse.

Modification 1 :

La solution suggérée par @Piotr Sołtysiak a été tentée, mais elle a également n'a pas réussi à résoudre le problème. Le filtre CORS était absent de la chaîne de filtres générée et l'erreur 401 a persisté.

Résolution :

Dans Spring Security 4.1 et versions ultérieures, la mise en œuvre de la prise en charge CORS a changé. L'approche préférée consiste à utiliser les configurations suivantes :

  • Créez une classe WebConfig qui étend WebMvcConfigurerAdapter et implémente la méthode addCorsMappings pour définir les origines, les méthodes et les en-têtes autorisés :
<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>
  • Dans votre classe SecurityConfig, activez CORS et définissez un CorsConfigurationSource personnalisé :
<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>

Évitez d'utiliser les approches incorrectes suivantes :

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

Ces méthodes sont obsolètes et fournissent une implémentation CORS incomplète.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn