Maison  >  Article  >  Java  >  Pourquoi est-ce que j'obtiens une erreur « Aucun en-tête « Access-Control-Allow-Origin » n'est présent » après l'ajout de Spring Security ?

Pourquoi est-ce que j'obtiens une erreur « Aucun en-tête « Access-Control-Allow-Origin » n'est présent » après l'ajout de Spring Security ?

DDD
DDDoriginal
2024-10-31 01:43:29339parcourir

Why Am I Getting a

Filtre CORS Spring Security : Dépannage « Aucun en-tête 'Access-Control-Allow-Origin' n'est présent »

Explication

L'ajout de Spring Security à un projet existant peut déclencher une erreur « Aucun en-tête 'Access-Control-Allow-Origin' n'est présent » lors des requêtes CORS (Cross-Origin Resource Sharing). Cette erreur se produit car l'en-tête de réponse Access-Control-Allow-Origin n'est pas ajouté aux requêtes.

Solution

Méthode 1 :

Mettez à jour votre code pour utiliser la prise en charge CORS intégrée de Spring Security. Ajoutez la configuration suivante à votre application :

<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>

Méthode 2 :

Si vous souhaitez plus de contrôle sur la configuration CORS, utilisez l'approche suivante :

<code class="java">@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        final CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(ImmutableList.of("*"));
        configuration.setAllowedMethods(ImmutableList.of("HEAD",
                "GET", "POST", "PUT", "DELETE", "PATCH"));
        configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type"));
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}</code>

Remarques supplémentaires :

  • Évitez d'utiliser http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); ou web.ignoring().antMatchers(HttpMethod.OPTIONS);, car ce sont des solutions incorrectes.
  • Assurez-vous que votre filtre CORS est positionné après SecurityContextPersistenceFilter et avant LogoutFilter dans la chaîne de filtres.
  • Vérifiez que l'en-tête Access-Control-Allow-Methods inclut les verbes HTTP nécessaires : GET, PUT, POST, etc.
  • Si vous rencontrez toujours l'erreur CORS, consultez les journaux de votre application pour toute information supplémentaire qui pourrait vous aider. identifier le problème.

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