spring social理解
现在互联网飞速发展,人们每天在互联网上冲浪,获取各种信息。各大网站为了方便用户的登录,提供了各式各样的社交登录,比如: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理解的更多相关文章
- spring social实现百度登录
在早期我写过一篇spring social理解的文章,介绍了一些spring social的概念,但是没有提供一个例子.在这篇博客中,提供一个简单的spring social的例子,实现 百度登录,那 ...
- 社交媒体登录Spring Social的源码解析
在上一篇文章中我们给大家介绍了OAuth2授权标准,并且着重介绍了OAuth2的授权码认证模式.目前绝大多数的社交媒体平台,都是通过OAuth2授权码认证模式对外开放接口(登录认证及用户信息接口等). ...
- Java框架-Spring MVC理解001
Spring MVC理解 1.servlet--Spring MVC的本质 2.Spring MVC其实是一个工具,具体的理解可以分为两步:第一步,了解这个工具是怎么创建出来的:第二步,了解这个工具是 ...
- Spring Security 源码分析(四):Spring Social实现微信社交登录
社交登录又称作社会化登录(Social Login),是指网站的用户可以使用腾讯QQ.人人网.开心网.新浪微博.搜狐微博.腾讯微博.淘宝.豆瓣.MSN.Google等社会化媒体账号登录该网站. 前言 ...
- spring的理解
看过<fate系列>的博友知道,这是一个七位英灵的圣杯争夺战争.今天主要来谈谈圣杯的容器概念,以便对spring的理解. 圣杯: 圣杯本身是没有实体的,而是将具有魔术回路的存在(人)作为“ ...
- mybatis中两种取值方式?谈谈Spring框架理解?
1.mybatis中两种取值方式? 回答:Mybatis中取值方式有几种?各自区别是什么? Mybatis取值方式就是说在Mapper文件中获取service传过来的值的方法,总共有两种方式,通过 $ ...
- Spring Security构建Rest服务-1001-spring social开发第三方登录之spring social基本原理
OAuth协议是一个授权协议,目的是让用户在不将服务提供商的用户名密码交给第三方应用的条件下,让第三方应用可以有权限访问用户存在服务提供商上的资源. 接着上一篇说的,在第三方应用获取到用户资源后,如果 ...
- 使用 Spring Social 连接社交网络
Spring Social 框架是spring 提供社交平台的分享组件 https://www.ibm.com/developerworks/cn/java/j-lo-spring-social/
- Spring深入理解(三)
Spring 中 AOP 特性详解 动态代理的实现原理 要了解 Spring 的 AOP 就必须先了解动态代理的原理,因为 AOP 就是基于动态代理实现的.动态代理还要从 JDK 本身说起. 在 Jd ...
随机推荐
- Docker入门之image篇
基本概念 Image 镜像:只读模板 Container 容器:从镜像创建的运行实例 Repository 仓库:集中存放镜像文件的场所.分为公开仓库(Public)和私有仓库(Private)两种形 ...
- 痞子衡嵌入式:原来i.MXRT1xxx系列里也暗藏了Product ID寄存器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列里暗藏的Product ID寄存器. MCU 厂商在定义一个产品系列时,通常是会预先规划产品发展路线的(即会有一 ...
- Java XXE漏洞典型场景分析
本文首发于oppo安全应急响应中心: https://mp.weixin.qq.com/s?__biz=MzUyNzc4Mzk3MQ==&mid=2247485488&idx=1&am ...
- 计算机网络-TCP篇
TCP篇 之前的总结文章:TCP简单版本介绍-三次握手等 基本认识 TCP 是⾯向连接的(⼀定是「⼀对⼀」才能连接).可靠的.基于字节流的传输层通信协议. RFC 793 是如何定义「连接」的:⽤于保 ...
- 隐私安全设置:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.
背景 访问一个内部网站时,遇到下面的问题,导致网站不能打开:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.从错误信息来看,这是由于网站的证书问题导致 ...
- awk的执行方式
https://blog.csdn.net/fengyuanye/article/details/82858863 awk执行有三种形式: 1.直接以命令行来执行, 语法形式为:awk ...
- Learning How to Learn 学习如何学习
Introduction 这是 UCSD 开设在 Coursera 上的课程 Learning How to Learn 的课程笔记.这门课程主要基于神经科学和认知心理学的一些研究成果讲述高效学习的理 ...
- BZOJ_1008 越狱(快速幂)
http://www.lydsy.com/JudgeOnline/problem.php?id=1008 Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教 ...
- Eclipse中快速生成Javabean的方法
总结一下: 先写出属性 无参构造器:Alt+/ 再按回车 全参构造器:Alt+Shift+S 再按字母O键 再按回车 toString方法:Alt+Shift+S 再按字母S键 再按回车 get/se ...
- springboot:@ConditionalOnProperty根据不同时机注入不同实现的bean
一.引言 在开发中经常会碰到这样的情形,一个接口会有不同的实现,但在开发中都是基于接口的注入,那么怎么根据不同的需求注入不同的类型就是一个值得考虑的问题.在注入属性时常用的两个注解是@Autowire ...