前端路径切换
methods: {
loadLoginInfo() {
let loginInfoString = localStorage.getItem('loginInfo');
if (!loginInfoString) {
this.$router.push('/login');
return;
}
this.loginInfo = JSON.parse(loginInfoString);
}
},
带有授权的登入系统
- 携带 jwt 访问应用服务1
- 解析jwt 获取用户id等相关信息
- 携带用户id 访问 授权服务
- 授权服务 返回用户id对应的权限
- 应用服务1核对对应的权限 判断并返回资源
微服务的登入系统 主要加入了网关这项服务
- 携带jwt访问网关
- 网关解析jwt获得用户id相关信息
- 网关 携带用户id重定向到应用服务1(注:携带用户id可以通过请求头传递)
- ...........(注:和带有授权的登入系统步骤一致)
jwt的加密流程
- jwt有三部分组成(head payload sign)
- 加密公式:base64(head).base64(payload).base64(sha256(base64(head).base64(payload)+salt))
网关处理jwt的续期逻辑
网关可使用的redis内存储jwt为key对应的数据,(例如expire过期时间,userId用户id,username用户姓名)
网关以jwt为key获取redis数据
- 获取成功
- 判断对应的过期时间是否少于两小时 少于则重设redis对应的过期时间
- 获取失败
- 重定向到登入界面
多设备登入 状态顶替业务
在jwt的生成时包含设备信息 (注:不同设备同一个用户登入会生成不同的jwt ,redis保存这些同一个用户不同设备的jwt的expire过期时间,同时保存当前用户登入的是哪个jwt 只有当前登入的jwt与客户端传递的相同并且未过期 才能继续向后传递)
redis结构
{jwt}:{expire}每条记录是一个设备的登入记录
{username}:{jwt}记录用户登入的是哪个jwt