【shiro】subject.login(token)流程源码分析

前言

之前在写【Shiro】SimpleAuthenticationInfo如何验证password的时候,了解了下验证方式的源码,但在做shiro整合Jwt时,debug发现执行的顺序和理解的不太一样,因此,中途插篇了解下这个login的源码,看看它是怎么执行进去的。

ps:主要目的是想和 验证的部分 衔接上,能力有限不敢一步登天😂。

1、源码查看

1.1 Subject接口

在这里插入图片描述

1.2 DelegatingSubject类

主要执行了securityManager的login方法。
在这里插入图片描述

1.3 SecurityManager接口

login的接口
在这里插入图片描述

1.4 DefaultSecurityManager类

该方法为login的实现类,最下面框住的就是最后的登录(感觉涉及到的方法比较多,但不算很难,有兴趣的大佬们可以再去细看)。我们这里主要关注如何走到验证,给登录提供info的。
在这里插入图片描述

1.5 AuthenticatingSecurityManager抽象类

在这里插入图片描述

1.6 Authenticator接口

顺着下来,找到authenticate接口,它的实现类,我们往有验证的看。
在这里插入图片描述

1.7 AbstractAuthenticator抽象类

ps:这个代码样式略显眼熟,感觉八九不离十了。
在这里插入图片描述
点击查看doAuthenticate方法,再去看它的实现类
在这里插入图片描述

1.8 ModularRealmAuthenticator类

看过官方文档,或者一些shiro执行登录的博客,我们都知道流程会执行到这这个类。
在代码中,单个Realm和多个Realm是什么?因为后面想看小程序,简单了解到,项目中会放web端的Realm和小程序端的Realm,分别处理不同的登录。(后续在慢慢了解)
在这里插入图片描述
往下继续查看doSingleRealmAuthentication方法,如下图,在该方法中值得留意的是realm.supports(token)realm.getAuthenticationInfo(token)这两个方法,他们都是Realm接口下的方法。
在这里插入图片描述

1.9 Realm接口

在这里插入图片描述
supports方法
这就不用多说了,这个就是1.8中翻译说的,确保realm支持token的类型。
ps:在整合jwt中,自定义realm需要重写supports方法

	@Override
    public boolean supports(AuthenticationToken token) {
        return token instanceof JwtToken;
    }

我们主要来看下getAuthenticationInfo方法。

1.10 AuthenticatingRealm类

在这里插入图片描述
到这里就基本了解了整个登录得到的源码。

2、总结图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值