如題,最近使用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有關。
