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 :
<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>
Évitez d'utiliser les approches incorrectes suivantes :
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!