现在互联网飞速发展,人们每天在互联网上冲浪,获取各种信息。各大网站为了方便用户的登录,提供了各式各样的社交登录,比如:QQ、微信和微博登录等。这些主流的社交登录大多是基于oauth协议进行实现,spring social 对oauth协议进行了封装,方便了用户快速使用第三方系统登录。

就拿我们的QQ登录来说,我们点击页面上的QQ登录图标,网站将我们导航到QQ登录的服务器,我们在QQ登录的服务器上完成登录,然后重新回到我们自己的服务器上,此时就完成了用户的QQ登录,我们也随之可以获取到QQ的用户信息。

在上面这个QQ登录流程中,用户在QQ服务器上登录成功后,返回到我们自己的系统中,此时QQ服务器给我们返回了一个授权码(code),然后应用程序后台暗箱操作,发送请求到QQ服务器根据这个授权码(code)去换取我们的访问令牌(access_token),然后在根据访问令牌(access_token)获取到用户的信息。

那么有了上面这个流程,我们需要获取到用户信息,但是不同的服务器提供商返回的用户信息可能不一样,比如QQ返回一些用户信息(用户名,图像),微信返回了一些用户信息(昵称,性别),那么此时我们就需要适配这些用户属性,变成spring social可以识别的,那么就需要ApiAdapter来进行适配。

对于QQ和微信这个应用程序,我们要去和他们打交道,获取用户信息,对于我们而言,QQ和微信这些就是一个服务提供商(ServiceProvider),我们要从这些服务提供商上获取到信息,就要走完他们的协议(oauth),而oauth协议的授权部分大致一致,在spring social中这部分有(Oauth2Operations)来完成。

当我们的客户端应用程序和服务端建立连接后(走完oauth协议)就形成了一个连接(Connection),允许应用程序调用服务提供商的api来获取或更新用户的信息。

Connection的创建是由ConnectionFactory来创建的,不同的协议(oauth1/oauth2...)对应着不同的ConnectionFactory实现。

张三使用QQ登录系统后,那么我们怎么知道它是对应业务系统的张三呢,此时就应该有一张UserConnection表表示对应关系,UserConnection需要持久化到数据库中或保存到内存中,那么此时是由UserConnectionRepository的实现来完成。

由了以上的简单了解,我们简单的总结一下。我们与服务提供商(ServiceProvider<A>)进行授权需要走授权流程,此时由Oauth2Operations来完成,授权流程走完之后,就可以获取到访问令牌(access_token),然后调用api来获取用户信息。但是不同的服务提供商可能返回的用户信息各不相同,此时就需要将用户信息进行适配,使之符合spring social需要的格式,此时就需要ApiAdapter来进行适配。不同的协议(oauth1/oauth2...)构造连接(Connection)各不相同,就是就需要ConnectionFactory来进行不同的协议的封装构成连接(Connection)。

ConnectionFactory 由ServiceProvider和ApiAdapter构成 (ConnectionFactory产生Connection,但是Connection的产生需要走授权流程,但是Connection的结构是固定的,各个服务提供商返回的用户信息各部相同,所以就需要ApiAdapter进行适配.)

ServiceProvider 由Oauth2Operations和Api构成

Api 为用户自己编写的接口,用户与服务提供商打交道,获取第三方用户在服务提供商上的信息。

spring social理解的更多相关文章

  1. spring social实现百度登录

    在早期我写过一篇spring social理解的文章,介绍了一些spring social的概念,但是没有提供一个例子.在这篇博客中,提供一个简单的spring social的例子,实现 百度登录,那 ...

  2. 社交媒体登录Spring Social的源码解析

    在上一篇文章中我们给大家介绍了OAuth2授权标准,并且着重介绍了OAuth2的授权码认证模式.目前绝大多数的社交媒体平台,都是通过OAuth2授权码认证模式对外开放接口(登录认证及用户信息接口等). ...

  3. Java框架-Spring MVC理解001

    Spring MVC理解 1.servlet--Spring MVC的本质 2.Spring MVC其实是一个工具,具体的理解可以分为两步:第一步,了解这个工具是怎么创建出来的:第二步,了解这个工具是 ...

  4. Spring Security 源码分析(四):Spring Social实现微信社交登录

    社交登录又称作社会化登录(Social Login),是指网站的用户可以使用腾讯QQ.人人网.开心网.新浪微博.搜狐微博.腾讯微博.淘宝.豆瓣.MSN.Google等社会化媒体账号登录该网站. 前言 ...

  5. spring的理解

    看过<fate系列>的博友知道,这是一个七位英灵的圣杯争夺战争.今天主要来谈谈圣杯的容器概念,以便对spring的理解. 圣杯: 圣杯本身是没有实体的,而是将具有魔术回路的存在(人)作为“ ...

  6. mybatis中两种取值方式?谈谈Spring框架理解?

    1.mybatis中两种取值方式? 回答:Mybatis中取值方式有几种?各自区别是什么? Mybatis取值方式就是说在Mapper文件中获取service传过来的值的方法,总共有两种方式,通过 $ ...

  7. Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理

    OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...

  8. 使用 Spring Social 连接社交网络

    Spring Social 框架是spring 提供社交平台的分享组件 https://www.ibm.com/developerworks/cn/java/j-lo-spring-social/

  9. Spring深入理解(三)

    Spring 中 AOP 特性详解 动态代理的实现原理 要了解 Spring 的 AOP 就必须先了解动态代理的原理,因为 AOP 就是基于动态代理实现的.动态代理还要从 JDK 本身说起. 在 Jd ...

随机推荐

  1. 八、Abp vNext 基础篇丨标签聚合功能

    介绍 本章节先来把上一章漏掉的上传文件处理下,然后实现Tag功能. 上传文件 上传文件其实不含在任何一个聚合中,它属于一个独立的辅助性功能,先把抽象接口定义一下,在Bcvp.Blog.Core.App ...

  2. throws声明异常中断式处理异常

    1.throws 编译期异常,一直往上抛最后是JVM处理(打印并中断程序) 2.声明多个或者直接声明父类

  3. k8s标签label

    1.给节点设置标签 一遍pod部署选择 kubectl label node 节点名 disktype=ssd kubectl label node master1 disktype=ssd 效果 [ ...

  4. 《挑战程序设计竞赛》——DFS

    DFS(深度优先搜索) 简介 深度优先搜索(DFS,Depth-First Search)是搜索的手段之一.它从某个状态开始,不断的转移状态直到无法转移.然后退回到前一步的状态,继续转移到其他状态,如 ...

  5. 【OI】WERTYU UVa 10082

    题目: A common typing error is to place the hands on the keyboard one row to the right of the correct ...

  6. 学习PHP中好玩的Gmagick图像操作扩展的使用

    在 PHP 的图像处理领域,要说最出名的 GD 库为什么好,那就是因为它不需要额外安装的别的什么图像处理工具,而且是随 PHP 源码一起发布的,只需要在安装 PHP 的时候添加上编译参数就可以了. G ...

  7. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...

  8. Git(2) - git安装、本地仓库与远程仓库使用详细指南

    git版本控制工具 下载地址:https://www.git-scm.com/download/win选择对应版本的工具,下载后是一个exe执行文件: 常用git命令 命令 作用 git init(在 ...

  9. Shell系列(31)- 双分支if语句简介

    双分支if条件语句 if [ 条件判断式 ] then 条件成立,执行的程序 else 条件不成立,执行的程序 fi 需求 根据用户输入的目录名,判断是否存在 脚本: #!/bin/bash #使用r ...

  10. php 日期相关的类 DateInterval DateTimeZone DatePeriod

    * DateInterval <?php /** * Created by PhpStorm. * User: Mch * Date: 7/18/18 * Time: 21:30 */ $dat ...