前言:
为了更好地了解和使用Shiro权限管理框架,本文总结了一下几个常见问题。
- 各大对象之间是如何串联起来运作的
- 认证过程是怎样的
- 授权过程是怎样的
一、认证过程
1、Subject对象
- Subject接收到前端传过来需要认证的用户信息
- 通过login方法传递给下个对象进行具体操作
2、SecurityManager对象(全局管理者)
- 将具体认证交给 认证官Authenticator处理
3、Authenticator认证对象
- 进行具体的认证操作
- 通过反射可以获取到继承Realm类的所有的Realm包括自定义的Realm
- 并且判断Realm的个数进入哪个具体的方法
4、Realm对象(与数据库对接)
- 在Realm中进行具体的查询数据库操作
- 将数据包装传给下个对象
- 参数一和参数四给授权使用,参数二、三(即密码和盐)留个自个儿进行认证
5、认证
- 主要的认证方法是Realm中的assertCredetialsMatcher
- 最底层的认证判断方法就是equals,有盐加密的情况下也会进行相应的加密再进行判断相等
二、授权过程
授权过程大致和认证的过程一致,只是操作的对象有所不同
1、Subject对象
- Sujectd对象的isPermitted方法其实和注解@RequiresPermissions()注解的方式一样
- 使用时两者留其一即可
2、SecurityManager对象
3、Authrizer授权对象
- 首先去缓存中查询有没有此用户的权限和角色(本文没做缓存,所以这里获取到的数据为空)
4、Realm对象
- 再调用Realm中的doGetAuthorizationInfo方法查询数据库中的权限和角色
- 进行具体的查询操作,并且将查出来的权限和角色封装成包装对象,进行下一步操作
5、授权
- 最后再通过implies方法来进行权限对比,没有权限的就拒绝访问,有权限的通过继续访问
- 具体的授权方法implies
三、总结
- 以上就是各个对象之间的调度流程
- Shiro的入门使用可参考博主的另外一篇文章:https://blog.csdn.net/weixin_38802061/article/details/96012077