之前对单点系统这几个字还挺敬畏的,也有点害怕,来公司很久了系统也一直使用单点登录,但是一直没有时间和机会研究,近来研究一下发现不过尔尔。


文章目录

  • 一、前言
  • 1-1、何为单点
  • 1-2、架构图
  • 1-3、其它
  • 二、单点详解
  • 2-1、用户请求
  • 2-2、前端跳转登录页面
  • 2-3、页面登录
  • 2-4、业务系统login接口
  • 三、其它




一、前言



1-1、何为单点

我们知道每个系统都应该有登录操作,如果你们有10个系统,并且这十个系统的用户都在一个集合里面的(常见的比如集团用户),那么你让用户注册10次记录10个密码,也对用户不友好也对代码不友好,所以就出了单点登录:所有的系统都共用一套登录页面



1-2、架构图

Java 多个系统之间单点登录 java中的单点登录_系统架构



1-3、其它

本篇文章是讲解单点系统的架构思路,没有真正的代码实现,主要是因为没有时间,但是架构思路不会错,是我公司和我朋友他们正在使用的架构。

下面文字也是详细解释上面的架构图,但是只要理解了自己写一个单点系统不过尔尔。

后面等有时间了,可能会出一个基本系统包含:单点登录系统统一用户系统统一权限管理系统


二、单点详解

为了方便大家的阅读,我这里只讲解主要流程,比如什么账号密码输入错了怎么办、用户请求数据携带了正确的token会返回正确的结果,这些一概不讲



2-1、用户请求

系统都是有一个登录拦截的,所有的请求都会判断是否有token,没有token的时候返回错误码:10001(标识未登录)



2-2、前端跳转登录页面

当前端解析到状态码为:10001 的时候,就会跳转到登录页面。

这里的登录页面单点系统的登录页面,由单点系统提供,这里我们假设页面地址为:http://127.0.0.1:9998/cas/login

我们使用location.href=http://127.0.0.1:9998/cas/login?url=http:127.0.0.1:8080/login 跳转登录页


我们看到传递了一个参数url,这个其实就是我们业务系统的登录接口的,也就是待会会跳转到这个地址


2-3、页面登录

用户输入完账号、密码,成功登录后会跳转(后台重定向)到这个地址 http:127.0.0.1:8080/login?ticket=3123dasdafafg

这就相当于访问我们的login接口,参数是ticket=3123dasdafafg

单点登录可以访问一个统一用户数据库,这个数据库就是存放了全部的用户信息。


2-4、业务系统login接口

我们拿到这个ticket然后调用单点系统的接口获取用户名(其实就是通过ticket得到用户名),无需对用户名进行校验,单点系统已经校验过了

通过用户名获取用户信息,然后新建一个token,把token和用户信息放到redis里面去。

重定向到业务系统首页http://127.0.0.1:8080/index.html?token=123dasffasf1


三、其它

Q:为何不直接在单点系统里面把token存入Redis

A:那是因为每个系统所使用的redis并不一样,所以这个token必须由具体的业务系统生成。