如題,最近使用spring boot集成shiro,在shiroFilter要使用數據庫動態給URL賦權限的時候,發現
@Autowired
注入的bean都是null,無法注入mapper。搜了半天似乎網上都沒有相關問題,也是奇怪。最后發現
/** * Shiro生命周期處理器 * * @return */ @Bean(name = "lifecycleBeanPostProcessor") public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); }
如果這個配置出現在類中,那么該類的autowired都會失效,解決辦法:分離這個配置就好了
@Configuration public class ShiroLifecycleBeanPostProcessorConfig { /** * Shiro生命周期處理器 * * @return */ @Bean(name = "lifecycleBeanPostProcessor") public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } }
shiro主配置
@Configuration @AutoConfigureAfter(ShiroLifecycleBeanPostProcessorConfig.class) public class ShiroConfig { ... }
關於這個類的描述
1.LifecycleBeanPostProcessor用於在實現了Initializable接口的Shiro bean初始化時調用Initializable接口回調,在實現了Destroyable接口的Shiro bean銷毀時調用 Destroyable接口回調。如UserRealm就實現了Initializable,而DefaultSecurityManager實現了Destroyable。具體可以查看它們的繼承關系。
2.保證實現了Shiro內部lifecycle函數的bean執行
看得不是很懂,應該是和shiro內部bean注入和AOP有關。