Invocation de filtre en double dans Spring Security avec @Autowire
Lors d'une tentative d'injection de dépendances dans un filtre via @Autowire dans Spring Security , cela peut entraîner un problème où le filtre est invoqué deux fois. Cela se produit car Spring Boot enregistre automatiquement tout bean filtre auprès du conteneur de servlet.
Pour éviter cette double invocation, il existe deux options :
1. Évitez d'enregistrer le filtre en tant que bean
Cela peut être réalisé en n'exposant pas le filtre en tant que bean et en l'enregistrant uniquement auprès de Spring Security. Cela garantit que Spring Boot n'enregistre pas automatiquement le filtre auprès du conteneur de servlet.
2. Utilisez FilterRegistrationBean
Si le câblage automatique des dépendances dans le filtre est essentiel, alors le filtre doit être un bean. Cependant, Spring Boot doit recevoir explicitement l'instruction de ne pas enregistrer le filtre en tant que filtre. Cela peut être fait à l'aide de FilterRegistrationBean, comme indiqué ci-dessous :
@Bean public FilterRegistrationBean registration(MyFilter filter) { FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>(filter); registration.setEnabled(false); return registration; }
Cette approche empêche Spring Boot d'enregistrer le filtre auprès du conteneur de servlet tout en permettant au filtre d'être automatiquement câblé par Spring Security.
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!