一、前言
在上一篇文章中,我们对第三方登录的基本流程进行了梳理,同时简单的介绍了下JustAuth的内容,相信此时你已经利用空闲时间自己完成了JustAuth的初步使用和测试,本文开始分享一下JustAuth的Spring Boot Starter的核心设计,通过这个Starter对JustAuth的核心类有个初步的理解和认识,希望大家在学习的同时,对于Spring Boot Starter设计的能力有所提升和学习。
对于第三方登录的业务交互一般的流程如下所示:
JustAuth组件的功能如下:
二、正文
对于想要阅读源码的小伙伴,经常会问到底如何看源码?之前分享过一种方式就是带着问题的方式去阅读源码,直到找到这个问题的为什么,每个人的阅读源码的切入点不太一样,总归能找到适合自己的的。阅读源码的从切入点入手的几个方法如下:
1、带着问题或目标去作为阅读源码的切入点
想象你去超市购物,但没有清单就像盲人摸象。带着问题或目标去阅读源码就像提前写好购物清单,你知道自己要找什么,能更快找到解决方案。比如:“这个方法为什么会出错?”或者“如何实现这个功能?”这样,你的阅读就有了方向,不至于在代码的海洋里迷失方向。
2、通过项目的ISSUE或项目的PR来作为阅读源码的切入点
这就像是去看电影前的影评,你会知道剧情的走向和主要冲突。项目的 ISSUE 和 PR 记录了开发者的“故事”,让你了解遇到的问题和解决方案。阅读这些内容,仿佛是在翻阅开发者的日记,可以帮助你快速把握项目的进展和思路。
3、从项目的Starter工程作为阅读源码的切入点
想象你在一个餐厅的菜单上挑选最吸引你的开胃菜。Starter 工程就是这些美味的开胃菜,它们提供了项目的基本功能。通过了解这些 Starter,你可以轻松找到关键的实现方式,就像发现了最受欢迎的菜品,帮助你快速上手。
4、通过项目的单元测试类作为阅读源码的切入点
单元测试类就像是项目的“体检报告”,它告诉你哪些地方健康、哪些地方需要修补。阅读测试类,你可以看到功能是如何被验证的,仿佛在看医生给你讲解身体健康一样。了解测试用例能让你明白代码的预期行为,帮助你更好地理解源码。
本文继续从项目的Starter入手,作为阅读源码的切入点,个人觉得从starter入手作为切入点的一个好处是,可以非常明显的知道当前项目的核心交互的处理类是什么,这样我们知道的核心的交互类,然后再从这个类作为起点进行入手。
1、JustAuth的Spring Boot Starter的项目地址如下:
2、我们首先要找到这个项目的自动装配的类是什么,查看项目资源目录下的spring.factories文件,如下所示:
可以非常清晰的看到,启动类为JustAuthAutoConfiguration,我们再看下这个类的源码做了哪些事情:
3、从源码中可以看到根据JustAuthProperties属性配置类和ConditionalOnProperty注解装配了一个AuthRequestFactory的Spring Bean,那么可以知道这个类就是我们在业务使用时的操作核心业务处理类,同时从名字中,可以看到这是一个工厂的设计模式的类,那这个类如何用呢,我们可以去看下这个Starter的主页面的介绍,可以看到这样的一个用法说明:
可以看到在业务的Controller类中,定义了2个业务的接口,来用到这个工厂类,第一个接口负责根据具体的第三方登录的类型来获取并拼接授权跳转需要的URL,即整个通信链路中的authorize的地址,第2个接口负责根据具体的第三方登录的类型来获取登录的具体的请求,并进行第三方用户的登录解析等等。然后我们再看下工厂是如何获取到具体的第三方登录请求的类数据的,即AuthRequest对象。
4、找到工厂类中的如下的get方法,代码如下所示,可以看到它先从内置的Default方法中获取下是否存在第三方登录请求处理实现类,不存在再去找自定义扩展的授权请求,还不存在则进行报错:
别看这个方法代码行数没几行,但是也体现了一种设计,就是一种插件化与扩展化的设计,如果未来自己设计代码时,如果想设计出一种让外部提供其他处理实现类的扩展,可以向他种,根据判断从其他位置进行加载。
5、接下来,我们再看下这个defautrequest方法的内容,代码如下所示:
通过这个代码,我们就知道了几个核心的类:AuthDefaultSource、EnumUtil、AuthConfig、AuthGiteeRequest等。
这样对于JustAuth的底层源码和设计,我们就非常快速的找到了核心的操作类,此时是不需要知道具体的底层代码是如何写的,我们只需要关注流程和主线。这个方法中,根据具体的第三方登录的类型,从枚举和配置中活了具体的配置,从而获得了具体的第三方登录请求的实现类,可以看到这是一个典型的策略模式的设计场景,后续再具体学习的时候,可以关注一下设计结构。
这样我们就大概对这个Spring Boot Starter的核心能力有个初步的理解,希望通过这个Starter的介绍,让大家对基础流程有个初步的理解。
三、最后
文本分析了JustAuth的Starter的基本情况,并简单的了解了JustAuth源码设计中可以作为切入点入口的几个类,下节我们继续分享。感兴趣的小伙伴如果有问题可以随时交流哦,这个组件是否非常值得我们学习的,日常的企业开发中很容易接触到需要对接第三方登录的场景。
感兴趣的小伙伴,可以一起交流、沟通、学习哦。