Maison >Java >javaDidacticiel >Pourquoi mon filtre Spring est-il invoqué deux fois lorsqu'il est défini comme un bean ?
Pour tirer parti de l'injection de dépendances Spring, il est courant d'enregistrer des filtres en tant que beans dans Spring Boot, généralement en utilisant @Autowire. Cependant, cela peut entraîner l'appel du filtre deux fois.
Comme vous l'avez remarqué, Spring Boot enregistre automatiquement les filtres marqués comme beans avec le conteneur de servlet. Cela signifie que votre filtre enregistré via @Bean est invoqué à la fois par Spring Security et par le conteneur.
Il existe deux approches principales pour résoudre ce problème :
1. Empêcher l'enregistrement automatique :
Si vous n'avez pas besoin de câbler automatiquement les dépendances dans votre filtre, évitez simplement de l'exposer en tant que bean. Au lieu de cela, définissez-la comme une classe Java standard et enregistrez-la manuellement auprès de Spring Security uniquement :
http.addFilterBefore(new YourFilter(), BasicAuthenticationFilter.class);
2. Désactiver l'enregistrement Spring Boot :
Pour enregistrer votre filtre manuellement tout en utilisant l'injection de dépendances, vous pouvez utiliser FilterRegistrationBean :
@Bean public FilterRegistrationBean registration(YourFilter filter) { FilterRegistrationBean<YourFilter> registration = new FilterRegistrationBean<>(filter); registration.setEnabled(false); // Disable Spring Boot registration return registration; }
Cette configuration empêche Spring Boot d'enregistrer votre filtre mais permet vous devez spécifier le bean filtre pour l'injection de dépendance Spring.
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!