springboot整合shiro出現realm中service注入爲'null'問題解決方案

環境

  • springboot 2.2.6
  • shiro 1.4.0
  • jdk 1.8.0_201

部分代碼

public class MyShiroRealm extends AuthorizingRealm {
    @Autowired
    UserService userService; ===》null
	............

在進行登錄操作時,userService 爲null。

解決方案

  1. 檢查ShiroConfig所使用的註解是不是 @Component ,正確的註解應爲 @Configuration ,兩個註解的差異可以查看如下文章。第一篇更易懂一些,兩篇文章都非常好,希望瞭解的可以仔細閱讀!
  1. 檢查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

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