1 前言 在shiro的使用实现中,会遇到一个问题,那就是用户和管理员的分别登录认证等,首先想到的就是只创建一个user表来存,并且给他们分别赋予不同的角色权限等。而下面要说的是另一个处理办法,那就是对于不同表的用户分别创建不同的Realm。下面就来具体看一下: 2 创建Realm 在这里创建了两个Realm作为例子(StudentRealm和AdminRealm),如图2.1 图2.1 上面展示的为AdminRealm,StudentRealm也为同理,继承AuthorizingRealm,并实现授权及认证,其中授权及认证就根据需要自行添加。 3 ShiroConfig配置 下面就是对ShiroConfig进行配置,首先就是引入这两个Realm:
接着编写shiro的DefaultWebSecurityManager,创建一个List集合,存入这两个Realm。注意:存单个Realm时用的是securityManager.setRealm(),而存多个时是securityManager.setRealms():
4 登录认证 最后就是对登录认证的编写,由于需要区分不同登录角色,所以首先就需要在前端页面加上选择的loginType,传不同的值过来,用于进行不同的认证: 图4.1 然后在写一个LoginToken类,继承UsernamePasswordToken,并且加入loginType的内容:
最后一步就是对Controller层接口的编写,需要传id(username),password以及选择登录的角色(学生/管理员),if判断选择的是学生还是管理员,分别进行不同的认证以及页面跳转,下面是自己的一个例子,仅供参考:
5 总结 这里展示的是最基本的设置,还有其他需求或漏洞还需要按实际情况及需求解决。 主 编 | 张祯悦 责 编 | 黄晓锋 where2go 团队 |
|