1.单点登录
登录之后,无需再次重复登录,即可操作项目的相关功能
包含两部分:登录,身份校验
1.用户点击登录页面输入用户登录信息
2.后台获取登录信息并以登录信息为条件查询数据
3.如果查询不到,提示信息错误
4.如果查到,制作token考虑到token的加密性,
(1)对于安全要求不高的情况可以直接使用UUID
(2)对于有较高安全要求的系统可以使用jwt,其中有效载荷里面存储我们的加密信息,我们项目中是将用户对应的P地址保存到载荷中的
5.为了实现单点这个功能,我们需要将token保存redis中,同时返回页面的时候浏览器的cookie中也会保存一份
6.重登成功重定向到用户登绿之前的页面
user -> 验证登陆信息 -> 组装JwtToken(ip、id、用户名) -> JwtToken存入cookie -> 原页面1.
2.身份校验
1.我们项目中使用的gateway网关提供全局过滤器,我们会预先设置一些公共资源,也即预留黑白名单
2.根据用户的请求路径判断是否是公共资源,如果是放行,若不是,拦截并校验token正确性
3.为了校验token要尝试获取token值,根据前端将token保存位置的不同,可以从请求头中获取也可以从cookie中获取
4.先要判断token是否为空如果为空重新登录
5.token不为空,利用预先设置好公钥解析token主要判断有效载荷中IP信息,如果IP信息比对不上就重新登录
6.如果以上信息均没有异常直接放行,后续无需再次解析对比token
3.身份校验(同2)
过滤器判断是否拦截 ->不拦截放行 -> 拦截获取token(同步操作从cookie中获取,异步操作从request头中获取) -> 验证token -> 有问题重定向login页面 -> 判断ip是否篡改 -> 验证通过就放行
3.1 为什么同步操作从cookie中取token,异步从request头里取token
同步操作从cookie中取token,异步从request头里取token的原因是因为cookie是存储在浏览器端的数据,而request头是存储在服务器端的数据。同步操作需要等待请求返回后才能获取到数据,而异步操作则可以在请求发送后立即返回结果。因此,为了避免同步操作阻塞页面的渲染,通常将token存储在cookie中;而为了提高响应速度和用户体验,通常将token存储在request头中 。