环境
- 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