解決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執行

看得不是很懂,應該是和shiro內部bean注入和AOP有關。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM