SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录

Java36

前面我们详细介绍了SSO、OAuth2的定义和实现原理,也举例说明了如何在微服务框架中使用spring-security-oauth2实现单点登录授权服务器和单点登录客户端。目前很多平台都提供了单点登录授权服务器功能,比如我们经常用到的QQ登录、微信登录、新浪微博登录、支付宝登录等等。
如果我们自己的系统需要调用第三方登录,那么我们就需要实现单点登录客户端,然后跟需要对接的平台调试登录SDK。JustAuth是第三方授权登录的工具类库,对接了国外内数十家第三方登录的SDK,我们在需要实现第三方登录时,只需要集成JustAuth工具包,然后配置即可实现第三方登录,省去了需要对接不同SDK的麻烦。
JustAuth官方提供了多种入门指南,集成使用非常方便。但是如果要贴合我们自有开发框架的业务需求,还是需要进行整合优化。下面根据我们的系统需求,从两方面进行整合:一是支持多租户功能,二是和自有系统的用户进行匹配。

一、JustAuth多租户系统配置

  • *GitEgg多租户功能实现介绍

GitEgg框架支持多租户功能,从多租户的实现来讲,目前大多数平台都是在登录界面输入租户的标识来确定属于哪个租户,这种方式简单有效,但是对于用户来讲体验不是很好。我们更希望的多租户功能是能够让用户无感知,且每个租户有自己不同的界面展示。
GitEgg在实现多租户功能时,考虑到同一域名可以设置多个子域名,每个子域名可对应不同的租户。所以,对于多租户的识别方式,首先是根据浏览器当前访问的域名或IP地址和系统配置的多租户域名或IP地址信息进行自动识别,如果是域名或IP地址存在多个,或者未找到相关配置时,才会由用户自己选择属于哪个租户。

  • *自定义JustAuth配置文件信息到数据库和缓存

在JustAuth的官方Demo中,SpringBoot集成JustAuth是将第三方授权信息配置在yml配置文件中的,对于单租户系统来说,可以这样配置。但是,对于多租户系统,我们需要考虑多种情况:一种是整个多租户系统使用同一套第三方授权,授权之后再由用户选择绑定到具体的租户;另外一种是每个租户配置自己的第三方授权,更具差异化。
出于功能完整性的考虑,我们两种情况都实现,当租户不配置自有的第三方登录参数时,使用的是系统默认自带的第三方登录参数。当租户配置了自有的第三方登录参数时,就是使用租户自己的第三方授权服务器。我们将JustAuth原本配置在yml配置文件中的第三方授权服务器信息配置在数据库中,并增加多租户标识,这样在不同租户调用第三方登录时就是相互隔离的。
1. JustAuth配置信息表字段设计

首先我们通过JustAuth官方Demo justauth-spring-boot-starter-demo 了解到JustAuth主要的配置参数为:

  • JustAuth功能启用开关
输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Fizz网关入门教程-安装

概述 Fizz网关是一个基于 Java开发的微服务聚合网关,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自...
Java

如何痛快地写一篇博客

如何痛快地写一篇博客 当各位踏入咱们的科技领域时,一定也有想写一篇博客的想法吧。可能在博客园,也可能在自建网站。但是,写博客要用markdown,不同于word,它的图片功能全部需要提供链接。而且直接...
Java

面向对象1(Java)

什么是面向对象 面向对象编程(oop) 面向对象编程的本质是以类的形式组织代码,以对象的形式组织(封装)数据[En]The essence of object-oriented programming...
Java

List的同步类比较

TL;NRs CopyOnWriteArrayList类在多线程顺序读取上有很大的优势,但在随机读取上反而有较大的劣势,且在写入方面性能极差。 Vector类在顺序读取方面性能较差,但在随机读取方面有...
Java

sql开发规范

SQL编写规约 SQL编写总原则 声明: 在没有把握或者根本没意识时,遵守规约可以保障你的程序不会"越界"。 所以规约并不代表一种最优方案或者某种教条。 当你相当有把握,明确知道自己在做什么的时候,请...
Java

多线程相关知识整理

java内存区域和内存模型是不一样的东西,内存区域是指Jvm运行时将数据分区存储,强调对内存空间的划分。而内存模型是定义了线程和主内存之间的关系,即JVM在计算内存中的工作方式,如果我们想要深入了解J...
Java

Java使用 Thumbnails 压缩图片

业务:用户上传一张图片到文件站,需要返回原图url和缩略图url 处理思路: 因为上传图片方法返回url是单个上传,第一步先上传原图并返回url 处理缩略图并上传:拿到MultipartFile压缩成...
Java

java获取txt文件中以空格分割的字符串

需求是用java程序获取txt文件中的数据并将姓名、职称、工资添加到新txt文件中,txt文件中数据的格式是固定的,如下: 添加后的格式是这样的: 这里不考虑工资是怎么算的,只说获取数据和写入数据的方...
Java

打工四年总结的数据库知识点

国庆节在家里很无聊。我在家里翻阅了与数据库相关的书籍,我对它上瘾了。因为我忘记了一些大学熟悉的数据库范例,我好奇地读了一点国庆节。[En]The National Day was boring at ...
Java

常见的开源 License

目录 什么是开源软件 什么是 license 商业许可证与开源许可证 对开发者的影响 开源许可证的类型 如何选择开源许可证 什么是开源软件 开源软件。假设有一天,我觉得代码的能力很好,我写了一个小工具...