登录问题
登录问题的基本步骤
对于单一服务器式 登录
- 使用session对象实现
- 登录成功之后,将用户数据放入session中,判断是否登录
session.setArrtibute("user",user)
session.getAttribute("user)
分布式单点登录 (sso模式)
- session广播机制实现 2 .cookie+redis 3. token
session 广播机制实现,session的复制
cookie+redis
在项目中任何一个模块进行登录,登录之后,放到俩个地方
- redis:key生成唯一值 在value中放数据
- cookie把redis里面生成的key放到cookie
访问项目中其它模块,发送带cookie进行发送
- 获取cookie值,然后做处理
- 把cookie获取值,到redis进行查询,根据key进行查询,如果查询到数据就进行登录
token
按照一定规则生成字符串,字符串可以包含用户信息(例如ip#用户名#****#加密)
- 在项目中某个模块进行登录,登录之后,按照规则生成字符串
把登录之后用户含生成字符串中,加密 返回
- 字符串通过cookie返回
- 字符串通过地址栏返回
- 再访问其它模块,每次访问时候,地址栏带着字符串,在地址栏获取的字符串根据
字符串获取信息
JWT
token是按一定规则,生成字符串,包含用户信息 (规定不是确定的,推荐使用jwt)
jwt生成好的规则,使用jwt规则生成字符串包含用户信息
jwt生成字符串包含三个部分
- jwt头信息
- 有效载体,包含主体信息(用户信息 (用户名密码))
- 签名hash(防伪标志) 可以设置秘钥 ,根据秘钥来设置加密
登录业务,拿到用户名和密码 在数据判断有没 调用jwt来生成字符串返回。
注册模块
拿到手机号 验证码 用户名 密码
- 判断是否为空
- 在redis中是否有验证码
- 判断手机号是否重复
- 存数据库
OAuth2 权限
- 开放系统间接授权,2.分布式访问问题
总项目 A B C模块 1. 登录成功之后,按照一定规则生成字符串,字符串包含用户信息 2. 把生成字符串通过路径传送,或者cookie 3. 后面再发送时候,每次带着字符串 进行发送,获取字符串,从 字符串获取用户信息
OAuth2解决方案,令牌机制,按照一定规则生成字符串,字符串包含用户信息