description du problème
Spring
En Filter注入Bean
lorsqu'il est injecté échec, Bean
il a été vide.
@Slf4j
@Component
public class RestAuthFilter extends FormAuthenticationFilter {
//实际注入为null
@Autowired
MobileDeviceService mobileDeviceService;
@Autowired
UserService userService;
...
}
analyse
Printemps, l'ordre de l'application Web est lancé: listener-> Filtre-> servlet.
auditeur initialisés, puis revenir à l'initialisation du filtre, alors seulement à l'initialisation de notre dispathServlet,
Par conséquent, quand nous avons besoin d'injecter une note de haricot dans le filtre, l'injection échouera,
Parce que lorsque le filtre est initialisé, non annoté initialisation du haricot, non injectée.
solutions
Méthode A: Outils d'injection manuelle
Outils d' injection Spring Référence: https://shentuzhigang.blog.csdn.net/article/details/104735859
injection manuelle classe Optimizer: Méthode deux
https://www.liangzl.com/get-article-detail-158316.html
Troisième méthode: chargement tectonique
1, étant donné que la section de configuration définit SecurityMetadataSource en utilisant la configuration de chargement
<beans:bean id="mySecurityMetadataSource" class="app_security.MyInvocationSecurityMetadataSource">
<beans:constructor-arg><beans:ref bean="resourceDao"/></beans:constructor-arg>
</beans:bean>
<beans:bean id="resourceDao" class="com.ipi.tyr.module.resourceModule.dao.impl.ResourceDaoImpl"></beans:bean>
2, dans la securityMetadataSource de classe personnalisée
private ResourceDao resourceDao;
public MyInvocationSecurityMetadataSource(ResourceDao resourceDao) {
this.resourceDao = resourceDao;
loadResourceDefine();
}
Article de référence
https://blog.csdn.net/hehuanchun0311/article/details/80513558
https://www.iteye.com/blog/awaitdeng-1040020
https://www.cnblogs.com/happyflyingpig/p/7998449.html