SpingBoot集成shiro,MyRealm中無法@Autowired注入Service的問題

網上說了很多諸如是Spring加載順序,shiroFilter在Spring自動裝配bean之前的問題,其實也有可能忽略如下低級錯誤。
在ShiroConfiguration中要使用@Bean在ApplicationContext注入MyRealm,不能直接new對象。
道理和Controller中調用Service一樣,都要是SpringBean,不能自己new。

錯誤方式:

@Bean(name = "securityManager")
public SecurityManager securityManager() {
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        MyRealm myRealm = new MyRealm();
        manager.setRealm(myRealm);
        return manager;
    }

正確方式:

@Bean(name = "myRealm")
public MyRealm myAuthRealm() {
        MyRealm myRealm = new MyRealm();
        return myRealm;
    }

@Bean(name = "securityManager")
public SecurityManager securityManager(@Qualifier("myRealm")MyRealm myRealm) {
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        manager.setRealm(myRealm);
        return manager;
    }
發佈了21 篇原創文章 · 獲贊 121 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章