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

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