现在互联网飞速发展,人们每天在互联网上冲浪,获取各种信息。各大网站为了方便用户的登录,提供了各式各样的社交登录,比如: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. ubuntu安装glusterFS

    以2台服务器为例: node1: 172.18.1.10 node2: 172.18.1.20 1) 修改主机名,修改hosts文件添加IP地址映射 hostname node1/node2vim / ...

  2. C# HttpWebResponse 请求常见的状态码

    Accepted 202 等效于 HTTP 状态 202. Accepted 指示已接受请求做进一步处理. AlreadyReported 208 等效于 HTTP 状态 208. AlreadyRe ...

  3. (6)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot项目详细搭建步骤

    ​ 在 Spring Tools 4 for Eclipse 中依次选择 File->New->Maven Project,然后在出现的界面中按图所示增加相关信息. ​ <paren ...

  4. Redis核心原理与实践--列表实现原理之ziplist

    列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入.弹出数据,可以充当栈和队列的角色. > LPUSH fruit apple (integer) 1 > RPUSH ...

  5. Lua io.lines()

    前言# 从文章的题目可以看出,今天的内容是和文件的行相关的,其实这个函可以看成是一个文件读取函数,只不过文件读取的形式固定了,就是只能一行一行的读,接下来我们就一起来看看这个函数究竟要怎么使用. 内容 ...

  6. CodeForce-734C Anton and Making Potions(贪心+二分)

    CodeForce-734C Anton and Making Potions  C. Anton and Making Potions time limit per test 4 seconds m ...

  7. 回忆之placeholder

    直接看效果点这里 HTML <!DOCTYPE html> <html> <head lang="zh-CN"> <meta charse ...

  8. 每日学习——iframe标签伪造ajax

    刚开始学习ajax,好难,看不懂啊看不懂. 伪造ajax加载网页 <!DOCTYPE html> <html> <head lang="en"> ...

  9. 密码学系列之:Argon2加密算法详解

    目录 简介 密钥推导函数key derivation function Password Hashing Competition Argon2算法 Argon2的输入参数 处理流程 简介 Argon2 ...

  10. PHP中命名空间是怎样的存在?(二)

    今天带来的依然是命名空间相关的内容,本身命名空间就是PHP中非常重要的一个特性.所以关于它的各种操作和使用还是非常复杂的,光使用方式就有很多种,我们一个一个的来看. 子命名空间 命名空间本身就像目录一 ...