框架建设收集SSM

Spring Social 基本原理

2019-06-15  本文已影响24人  青衣敖王侯

   上一篇文章中我们讲解了OAuth基本原理。这篇文章我们将讲一下OAuth和Spring Social之间的关系
  我们把上一章节中的图略微修改一下,也就是第六步获取自拍数据变成获取用户信息,Client获取到服务提供商的用户信息后,构建Authentication(在SpringSecurity中登录验证成功后就会生成Authentication)并放入到SecurityContext中,图中的第1-7步骤就构成了SpringSocial要做的事情。


  那么步骤1-7在SpringSocial中是怎么完成的呢?它提供了一些接口和默认的实现类,如下图所示:

1.ServiceProvider

  这个接口主要是完成步骤1-6,这个接口主要依靠OAuth2Operations和Api两个接口合作完成,SpringSocial提供了一个抽象类AbstractOAuth2ServiceProvider

1.1OAuth2Operations

  这个接口主要是完成步骤1-5,默认的实现类是OAuth2Template

1.2Api

  这个接口主要是用于获取服务提供商的用户信息也就是步骤6,SpringSocial提供了一个AbstractOAuth2Binding的抽象类

2.Connection

  Connection封装的是服务提供商中的用户信息,但是封装标准和Api从服务提供商获取的用户信息会有差别,所以会提供一个ApiAdapter这个接口来适配。Connection的一个默认实现是OAuth2Connection

3.ConnectionFactory

  用于创建Connection信息的接口,这个Factory包含了ServiceProvider接口和ApiAdapter接口,也就是这个Connection工程通过ServiceProvider获取用户信息,然后适用ApiAdapter来将获取到的用户信息封装为Connection。

4.UsersConnectionRepository

  我们获取到服务提供商的用户信息后,可能映射到我们业务系统的用户信息会有一些差别,比如我们从微信中获取到的openId是XXXXXX,但是在我们的业务系统中可能存储的对应用户是ZZM,那么这个时候我们就需要一个Repository帮我们做映射和存储。UsersConnectionRepository就是做这件事情的,它提供了一个默认实现JdbcUsersConnectionRepository。
  综上,SpringSocial提供了这些组件来帮助我们完成授权登录,这些组件被一个叫做SocialAuthenticationFilter的Spring Security过滤器使用,帮助我们完成开发第三方登录。如下图所示:



一个完整的登录请求处理流程如下:



这个流程对大家来说还比较抽象,我将在下一篇文章中开发一套QQ和微信的第三方登录来帮助大家理解。这里大家只需要记住SpringSocial中各个组件模块的作用就好。
上一篇下一篇

猜你喜欢

热点阅读