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 ...
随机推荐
- 即时通讯网-TCPIP族关系图
- ubantu虚拟机搭建xl2tp服务
在编译成功源码,安装完毕xl2tpd后,便可以配置xl2tpd服务.基本配置过程主要涉及两个配置文件:一个用来配置xl2tpd, 一个用来配置ppp协议.下面分别对这两个文件进行说明,最后添加xl2t ...
- PHP设计模式之状态模式
状态模式从字面上其实并不是很好理解.这里的状态是什么意思呢?保存状态?那不就是备忘录模式了.其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了一个类一样.说起来有点拗口吧,先学习概 ...
- Java基础系列(19)- Switch结构
package struct; public class SwitchDemo01 { //case穿透 //switch 匹配一个具体的值 public static void main(Strin ...
- Java基础系列(6)- 注释
注释 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了 注释不会被执行,是给开发人员看的 书写注释是一个非常好的习惯 Java中的注释有 ...
- Docker系列(13)- 部署es+kibana
部署elasticsearch # es 暴露的端口很多 # es 十分的消耗内存 # es 的数据一帮需要放置到安全目录!通过挂载实现 # DockerHub上安装文档,其中 --net somen ...
- Java面向对象系列(14)- 接口的定义与实现
接口 普通类:只有具体实现 抽象类:具体实现和规范(抽象方法)都有 接口:只有规范!约束和实现分离 接口就是规范,定义的是一组规则,体现了现实世界中"如果你是-则必须能-"的思想. ...
- vue 改变路由参数
更改路由传递的参数: const query = JSON.parse(JSON.stringify(this.$route.query)) // 获取路由参数信息 query.id = Name / ...
- .Net Core利用反射动态加载类库的方法(解决类库不包含Nuget依赖包的问题)
在.Net Framework时代,生成类库只需将类库项目编译好,然后拷贝到其他项目,即可引用或动态加载,相对来说,比较简单.但到了.Net Core时代,动态加载第三方类库,则稍微麻烦一些. 一.类 ...
- JVM类加载器的分类
类加载器的分类 JVM支持两种类型的类加载器,分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader). 从概念上来讲,自定 ...