一 传统登陆 session/cookie
出现的问题-->客户端不仅仅是浏览器,有可能是其他客户端,比如app,小程序.....而这些客户端有可能不支持session/cookie
传统登陆流程图例
&&那么如何解决以上问题?
利用令牌(token)登陆
&&数据库的选择
1>mysql 能存 但时效不满足
2>redis 能存且有时效
选redis来存token
二 Token登陆
将原来的sessionId修改成手动增加的tokenId
令牌登陆的流程
1>客户端发起登陆请求,带上账号/密码到后端接口
2>后端接收请求,获取账号与密码,以它们作为条件查询数据库得到user对象
3>判断user对象是否为null,如果为null,提示登陆失败
4>如果user对象不为null,创建token
String token = UUID.........保证唯一
5>以token为key,user对象为value 缓存到redis中,有效时间30分钟
6>将token跟user对象封装到JsonResult中返回到客户端
7>客户端接收到响应值,并解析得到token跟user对象,然后缓存这些数据
注意-->设置有效时间30分钟(和前面保持一致)
-----------------------------------------------------------------------------------
8>下一次请求,客户端在发起请求之前,手动将token设置到请求头中,跟请求参数一起发送到服务端
9>后端服务器一接收请求,通过Request对象获取到token请求头
String token = request.getHeader("token");
10>以token作为key,查询redis数据库,得到user对象
11>判断user对象是否为null
为null,表示没有登陆/登陆时效超时 提示
不为null
- 重置token时效时间为30分钟
- 执行后续逻辑