環境
- springboot 2.2.6
- shiro 1.4.0
- jdk 1.8.0_201
部分代碼
public class MyShiroRealm extends AuthorizingRealm {
@Autowired
UserService userService; ===》null
............
在進行登錄操作時,userService 爲null。
解決方案
- 檢查ShiroConfig所使用的註解是不是 @Component ,正確的註解應爲 @Configuration ,兩個註解的差異可以查看如下文章。第一篇更易懂一些,兩篇文章都非常好,希望瞭解的可以仔細閱讀!
- 檢查ShiroConfig中的realm是否加上了@Bean註解
@Configuration
public class ShiroConfig {
/**
* 自定義身份認證 realm;
* <p>
* 必須寫這個類,並加上 @Bean 註解,目的是注入 MyShiroRealm, 否則會影響 MyShiroRealm類 中其他類的依賴注入
*/
@Bean
public MyShiroRealm myShiroRealm() {
MyShiroRealm myShiroRealm = new MyShiroRealm();
// 設置密碼比較器
myShiroRealm.setCredentialsMatcher(CredentialsMatcher());
// 啓用身份驗證緩存,即緩存AuthenticationInfo信息,默認false
myShiroRealm.setAuthenticationCachingEnabled(true);
// 啓用授權緩存,即緩存AuthorizationInfo信息,默認false,一旦配置了緩存管理器,授權緩存默認開啓
myShiroRealm.setAuthorizationCachingEnabled(true);
return myShiroRealm;
}
}
遺留問題
即使成功注入service可能會導致注入的service事物失效,解決辦法見
shiro for example: not eligible for auto-proxying