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
DDDoriginal
2024-12-05 17:45:13712parcourir

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

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!

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