Shiro的运行原理

前言:

 

为了更好地了解和使用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

 

三、总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值