美文网首页
Spring Security Social登陆源码分析

Spring Security Social登陆源码分析

作者: JetBean | 来源:发表于2018-12-04 12:44 被阅读0次

    前几天,跟一位资深老猿交流学习经验,才知道只是共享,代码开源的重要性。于是乎,就注册了这个平台,第一次发文,后面会陆续把我之前总结的学习经验共享处理,还望互联网的前辈们多多指教。

    因为刚好这段时间,公司在做第三方登陆和单点登陆。在对接完工作后,我对spring security的源码进行了一个跟踪学习。这篇我们来分析一下第三方登陆的源码分析

    首先,在讲解第三方登陆之前,OAuth2协议我就不多说了,我们来看下QQ或者微信授权码模式的登陆时序图:

    第三方授权登陆时序图

    看懂了上面的时序图后,我们先来看下社交登陆的涉及到的几个类:

    社交登陆类图

    第一步,首先会进入SocialAuthenticationFilter 这个filter,而这个filter继承了父类的filter方法,

    先执行父类AbstractAuthenticationProcessingFilter的doFilter方法,

    然后调用子类SocialAuthenticationFilter 的实现方法authResult =this.attemptAuthentication(request, response);

    第二步,调用获取SocialAuthenticationService接口的实例对象,构建auth =this.attemptAuthService(authService, request, response);方法的实现

    第三步,在最终执行doAuthentication方法的时候,会先构建这个方法需要的两个参数,一个authService 第二步以及构建出来,一个SocialAuthenticationToken 这个方法里已经获取到token,具备这两个参数后,开始执行下一步

    第四步,获取一个AuthenticationManager  这个manager由其子类ProviderManager 来具体实现这个方法

    第四步,我们来看下这个ProviderManager 的具体流程,这里面使用了一个AuthenticationProvider 接口 通过这个接口的实现类SocialAuthenticationProvider来具体实现这个方法

    第五步,SocialAuthenticationProvider 调用我们自己的实现类,去数据库查数据判断用户登陆数据是否满足登陆条件

    第六步,返回成功后调用updateConnections 方法,创建UsersConnectionRepository 保存第三方应用数据到数据库中

    了解源码之后,接下来我们就来分析下我们实现一个第三方登陆需要具体哪些流程:

    spring security 给我们提供了一个接口,专门用来实现第三方登陆的业务逻辑,第一个类就是

    AbstractOAuth2ServiceProvider  而这个类具体依赖OAuth2Template,AbstractOAuth2ApiBinding 这两个类,具体类图如下

    所以我们先要获取这两个实现,才能拿到AbstractOAuth2ServiceProvider

    这里看下我们需要实现的几个类已经对应的接口之间的类图。

    如果需要自定义请求路径,需要自己实现SpringSocialConfigurer 并且配置filterProcessesUrl 。

    相关文章

      网友评论

          本文标题:Spring Security Social登陆源码分析

          本文链接:https://www.haomeiwen.com/subject/kctmcqtx.html