一、token(key)——json数据(value)
方案实现
*注意:需要多端使用一个域名/主机
登录的处理流程:
- 登录页面提交用户名密码
- 登录成功后生成token。Token相当于原来的jsessionid,字符串,可以使用uuid
- 把用户信息保存到redis。Key就是token,value就是User对象转换成json
- 使用String类型保存Session信息。可以使用“前缀:token”为key
- 设置key的过期时间。模拟Session的过期时间。一般半个小时
- 返回token
- 登录成功
- 前端接收并存储token
安全退出
根据token(key)删除redis中的数据
参考文档:https://blog.csdn.net/tanga842428/article/details/79756992
方案分析
适用于访问用户信息较多的项目,如论坛、博客
优点
数据读取方便,直接取出value并转换成json对象即可
缺点
需要手动配置相关拦截器、redis逻辑、复杂权限校验(rules、role)等
二、token(key)——id(value)
方案实现
*注意:需要多端使用一个域名/主机
登录的处理流程:
- 登录页面提交用户名密码
- 登录成功后生成token,Token相当于原来的jsessionid,字符串,保证唯一性可以使用uuid
- 把用户id和token保存到redis。**Key就是用户前缀:id,value就是token
- 设置key的过期时间
- 返回token、id
- 登录成功
- 前端接收并存储token、id
安全退出
根据前缀:id(key)删除redis中的键值对
方案分析
适用于用户信息需求较少的情况,如:订单模块、商品模块等
优点
读取速度更快、占用内存更小、权限校验只需配置一个过滤器
缺点
用户数据获取相对麻烦
三、shiro整合redis
方案实现
*注意:需要多端使用一个域名/主机
方案分析
适用于已经使用shiro做权限校验的扩展
适用于权限校验粒度比较细的项目,如后台管理(集群)等
优点
代码成熟、粒度很细、只需要进行一些shiro的配置(manager及relam)
缺点
对于不需要很细粒度的权限校验项目来说比较冗余、内存需求相对方案一二较大
四、jwt实现单点登录
*注意:需要多端使用一个域名/主机
方案实现
- 登录页面提交用户名密码
- 登录成功后生成jwt、包含id等非敏感信息
- 返回jwt
- 登录成功
- 前端接收并存储jwt
方案分析
优点
数据不存储在后端,不存在内存压力
缺点
数据存储在前端、每次请求都需要携带jwt,请求的数据量增加
五、spring security+Oauth2+Jwt
方案实现
https://blog.csdn.net/weixin_40773253/article/details/84589785
方案分析
优点
server服务器(认证中心)需要单独部署,项目不用部署在同一个域名下,配置很灵活
缺点
依赖相对较多,认证中心单独部署,服务器压力增大
六、解决单点登录只能同一域名问题(一到四):CAS
spring security+CAS: https://blog.csdn.net/qq_35618489/article/details/88186959
server服务器需要单独部署、需要秘钥,使用安全性很高、扩展灵活
七、其他
shiro与spring security比较
https://www.jianshu.com/p/0891b2279c65