Maison > Java > javaDidacticiel > Pourquoi mon filtre Spring est-il invoqué deux fois lorsqu'il est défini comme un bean ?

Pourquoi mon filtre Spring est-il invoqué deux fois lorsqu'il est défini comme un bean ?

DDD
Libérer: 2024-12-05 17:45:13
original
740 Les gens l'ont consulté

Why is My Spring Filter Invoked Twice When Defined as a Bean?

Pourquoi un filtre est-il invoqué deux fois lorsqu'il est enregistré en tant que bean Spring ?

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.

Cause

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.

Solution

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);
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal