在本次编写学生宿舍管理系统时,在实现shiro对不同的表进行登录认证与权限管理的时候,出现错误。
首先,我们要知道的是shiro与spring整合配置两个realm时,两个realm返回了不同的AuthenticationInfo,但PrincipalCollection只包含一个principal。
这个时候,如果你依然使用单个realm的话,是无论无何也无法实现对两张表的操作的。
通过查看相关的源码 以及他人的经验,最终得以解决。
这里我推荐一篇博客SpringBoot 与Shiro 整合系列(四)多realm延伸之实现多realm不同数据表用户登录认证和鉴权
以及githubSpringBoot与Shiro整合实现: 1.用户认证与权限管理 2.MD5盐值加密 3.多Realm验证和鉴权
文章最后很重要的一点就是:
当配置了多个Realm时,我们通常使用的 认证器 是shiro自带的org.apache.shiro.authc.pam.ModularRealmAuthenticator,
- 其中决定使用的Realm的是doAuthenticate()方法。
- 自定义Authenticator
- 注意,当需要分别定义处理 学生和系统管理员验证的Realm时,前端的登录页面的realm所选择的value的值,要对应Realm的全类名应该包含字符串“Admin”或者“Student”。
- 并且,他们不能相互包含,例如 处理 系统管理员的Realm的全类名中不应该包含字符串“Student”