解決Spring Boot集成Shiro,配置類使用Autowired無法注入Bean問題

如題,最近使用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執行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章