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

    一.获取时间所在周的周一.周五 function getFirstLastDay (time) { let date = new Date(time) let Time = date.getTime( ...

  2. C# 动态构建表达式树(二)——构建 Select 和 GroupBy 的表达式

    C# 动态构建表达式树(二)--构建 Select 和 GroupBy 的表达式 前言 在上篇中写了表达式的基本使用,为 Where 方法动态构建了表达式.在这篇中会写如何为 Select 和 Gro ...

  3. PHPDebug互动扩展【phpdbg】功能浅析

    对于 PHP 开发者来说,单步的断点 Debug 调试并不是我们的必修课,而 Java . C# . C++ 这些静态语言则会经常性地进行这种调试.其实,我们 PHP 也是支持这类调试方式的,特别是对 ...

  4. Docker系列(10)- 常用命令小结

    #橙色前面笔记已记录,黑色后面笔记将完善#勤加练习!!!attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像 build ...

  5. 执行sudo apt-get update,连接失败

    问题:sudo apt-get update连接失败 错误:1 http://cn.mirrors.ustc.edu.cn/ubuntu bionic InRelease 连接失败 [IP: 218. ...

  6. python全局变量的定义

    第一:如定义在类或者函数体外,在函数或者类中引用需要用到 global声明 temp_t = "ceshi" def tmp1(): global temp_t temp_t =1 ...

  7. filter_var() 验证邮箱、ip、url的格式 php

    验证邮箱格式的正确与否:你的第一解决方案是什么呢? 不管你们怎么思考的:反正我首先想到的就是字符串查找看是否有@符号: 但是对于结尾的.com或者.net 亦或者.cn等等越来越多的域名验证感觉棘手: ...

  8. 关于微信小程序爬虫关于token自动更新问题

    现在很多的app都很喜欢在微信或者支付宝的小程序内做开发,毕竟比较方便.安全.有流量.不需要再次下载app,好多人会因为加入你让他下载app他会扭头就走不用你的app,毕竟做类似产品的不是你一家. 之 ...

  9. P4320-道路相遇,P5058-[ZJOI2004]嗅探器【圆方树,LCA】

    两题差不多就一起写了 P4320-道路相遇 题目链接:https://www.luogu.com.cn/problem/P4320 题目大意 \(n\)个点\(m\)条边的一张图,\(q\)次询问两个 ...

  10. P3293-[SCOI2016]美味【主席树】

    正题 题目链接:https://www.luogu.com.cn/problem/P3293 题目大意 给出一个长度为\(n\)的序列,\(m\)次询问给出\(b,x,l,r\)表示询问在\([l,r ...