《SpringCloud篇:聊天实现001遇到问题解决》《单点登录、多端登录》

在这里插入图片描述

一、pom依赖

在这里插入图片描述
+公共依赖
在这里插入图片描述
+插件
在这里插入图片描述

二、README.md

项目介绍

### 这个项目是所有项目的父工程,禁止任何开发人员对其修改
### MAVEN 私服地址
### 使用的微服务的组件的地址
### nacos:
		username:
		password:
### Redis地址

三、新建model

3.1pom依赖指定父工程

在这里插入图片描述
+依赖(不配置版本号,统一使用一个版本号),数据库使用版本号5.1.47避免时区问题
在这里插入图片描述
+连接池
在这里插入图片描述
注意:导入子工程时idea下载依赖卡住,关闭idea,任务管理器也关闭idea,百度—手动导入依赖
在这里插入图片描述

3.2创建一个controller,聊天用的,在给他们一个父类BaseController

1.原因:BaseController里面获取request对象,拿到head对象,平时是写注解的,可能会出现多参数定义问题。
2.例如:错误演示如下,使用参数拿到对象
在这里插入图片描述
在这里插入图片描述
3.写base
在这里插入图片描述
4.写继承类controller
在这里插入图片描述

5.导致问题:
一个线程进来指向一个request对象,但是controller是单例的,所以声明成员的时候,进行公共调用容易导致多线程操作对象是同一个,导致线程不安全
6.解决:在BaseCcontroller进行统一的封装,
比如调用微服务的用户中心,获取一个人的详细信息,声明微服务的客户端
将token放在base里(拿token的三种方式)
在这里插入图片描述

在这里插入图片描述

四、.扩展:单点登录、多端登录(两个事情!!!不要混淆)

1.定义
单点登录:为了让所有的服务节点都能统一的知晓用户登录的合法性,进而只在用户中心登录,获取token,这一个token在所有的服务节点都可以使用

多端登录:用户登录以后,如果换一台设备再次进行登录,就有两种方案:
1.把之前登录的用户踢掉线(作废第一个token)
2.也可登录,两端同时操作一个用户的数据、业务、行为

2.图解
在这里插入图片描述
优势:去中心化,没有一个中心化去管理JWT,所有服务公用一个JWT。高并发性优势。(中心化,就是其他服务器没能力直接调用JWT,直接解析,每次都需要调用新的接口)。
缺点:踢用户掉线无法实现(拿到token哪里都可以去,想踢客户端掉线,没有意义,因为token在所有服务器上都生效了)。

3.使用Redis实现token,图解
在这里插入图片描述
3.1Redis实现踢掉线?
我们需要去请求Redis,删除对应的token与json就可以了。
怎么知道用户对应的token呢?
如果token是用JWT实现的,那么所有节点都可以知道uid,所有节点也都可以通过uid生成token,JWT的结构是什么?头部,载荷,签证

JWT的结构:
1.jwt头:JWT头部分是一个描述JWT元数据的JSON对象
2.有效载荷:七个默认字段+自定义私有字段
3.签名=HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload) ,secret)

在这里插入图片描述

因为token是不一样的,所以使用每个服务都有的JWT解析器,直接解析token,生成uid,然后删除uid键对应的key,实现踢掉线。
缺陷:不去中心化了,导致所有节点处理请求都依赖Redis,进而使得Redis要高并发

4.总结:上述两种方式其实解决问题的时候,主要是是否把信息放入redis中,如果想能踢掉线,一定得有一个中心化的东西,它可以是Redis,也可以是一个服务。


权限是自身请求url的时候,我们服务器是否允许的问题
单点登录是,我们服务器是否认识你的问题

5.CAS登录中心,图解
在这里插入图片描述
优点:
可以处理踢掉线,在登录的时候将用户id和token存储到表
缺点:
主要问题是网络开销,单点登录中心的负载问题,
当用户无权限的时候,重定向有问题(前端做)
6.多端实现踢掉线功能:在Redis中存储的key上再加一个字段
在这里插入图片描述

五、登录

获取头信息里面的token
在这里插入图片描述
2.controller子类中调用base

3.自定义状态码R类
在这里插入图片描述
在这里插入图片描述
+重载
在这里插入图片描述
+JSONObject返回值的
在这里插入图片描述
3.1基于功能状态码R类

在这里插入图片描述
4.controller得到状态码结果
5.配置配置文件
6.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值