網上說了很多諸如是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;
}