- 单机tomcat应⽤登录检验
- sesssion保存在浏览器和应⽤服务器会话之间
- ⽤户登录成功,服务端会保存⼀个session,当然客户端有⼀个sessionId
- 客户端会把sessionId保存在cookie中,每次请求都会携带这个sessionId
- 分布式应⽤中session共享
- 真实的应⽤不可能单节点部署,所以就有个多节点登录session共享的问题需要解决
- tomcat⽀持session共享,但是有⼴播⻛暴;⽤户量⼤的时候,占⽤资源就严重,不推荐
- 使⽤redis存储token
- 服务端使⽤UUID⽣成随机64位或者128位token,放⼊redis中,然后返回给客户端并存储在cookie中
- ⽤户每次访问都携带此token,服务端去redis中校验是否有此⽤户即可
- 什么是JWT
- JWT 是⼀个开放标准,它定义了⼀种⽤于简洁,⾃包含的⽤于通信双⽅之间以 JSON 对象的形式安全传递信息的⽅法。 可以使⽤ HMAC 算法或者是 RSA 的公钥密钥对进⾏签名
- 简单来说: 就是通过⼀定规范来⽣成token,然后可以通过解密算法逆向解密token,这样就可以获取⽤户信息
- 优点
- ⽣产的token可以包含基本信息,⽐如id、⽤户昵称、头像等信息,避免再次查库
- 存储在客户端,不占⽤服务端的内存资源
- 缺点
- token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,如⽤户权限,密码等
- 如果没有服务端存储,则不能做登录失效处理,除⾮服务端改秘钥
- JWT格式组成 头部、负载、签名
- header+payload+signature
- 头部:主要是描述签名算法
- 负载:主要描述是加密对象的信息,如⽤户的id等,也可以加些规范⾥⾯的东⻄,如iss签发者,exp 过期时间,sub ⾯向的⽤户
- 签名:主要是把前⾯两部分进⾏加密,防⽌别⼈拿到token进⾏base解密后篡改token
- 关于jwt客户端存储
- 可以存储在cookie,localstorage和sessionStorage⾥⾯
- header+payload+signature
登录校验Json Web Token实战之封装通⽤⽅法
- 加⼊相关依赖
- 封装⽣产token⽅法
- 封装校验token⽅法