shiro的认证过程

下图为调用subject.login()方法进行登录认证时的方法调用过程。

大致过程为:

1:当调用subject.login方法时,实际上调用的是SecurityManager的login方法。

2:SecurityManager里有个Authenticator(即认证器),SecurityManager会将认证动作交给认证器,认证器可以设置认证策略(这里不说)。

3:SecurityManager设置过AuthenticatingRealm的子类,最终认证动作会传递给AuthenticatingRealm的getAuthenticationInfo方法。

4:重点介绍一下AuthenticatingRealm类的getAuthenticationInfo方法

     (1)方法中的token参数是对用户输入的账号和密码的封装

     (2)代码第568行是根据token调用doGetAuthenticationInfo,来获取一个AuthenticationInfo对象

     (3)AuthenticatingRealm类的doGetAuthenticationInfo方法是抽象方法,供子类重写的(所以我们继承AuthenticatingRealm时都要重写doGetAuthenticationInfo方法),在重写的方法中,我们首先验证token中账号的合法性,然后再根据token中的账号获取到用户保存的密码,最后将密码封装成一个SimpleAuthenticationInfo对象(AuthenticationInfo的子类)返回给568行的info。

     (4)在第(3)步中已经进行了账号的合法性验证,而且获取到了用户保存的密码;代码第578行是将用户输入的信息的封装token和获取到的info进行比对(实际上仅仅是密码凭据的比对)。


     

4:该步骤就是进行密码凭据的比对,比对密码要借助CredentialsMatcher,代码第595行获取到CredentialsMatcher,第597行调用CredentialsMatcher的doCredentialsMatch方法进行比对。

5:CredentialsMatcher的实现类有很多

6:先介绍AuthenticatingRealm的默认Matcher:SimpleCredentialsMatcher是怎么比对密码凭据的。(一般人一眼就能看懂)

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值