一个不依赖Session的登录逻辑

JFinal-club里实现也是类似。

JBolt里的一个登录 实现了多少东西 已经全部实现:

1、去掉所有session

2、全部换成ThreadLocal 

3、在任何java和enjoy模板里都可以获取到用户信息

4、用户登录 jbolt平台为其生成一个OnlineUser 存在表里放进缓存 然后写入httponly cookie 

5、JBoltBaseHandler 拦截请求后判断读取用户httponly cookie 拿到用户信息判断有没有和过没过期 如果正常就写入threadLocal 不正常会交给后面的权限拦截器拦截到 控制跳转逻辑

6、全局可配置 多上时间不操作就能自动锁屏 默认600秒

7、全局可配置 登录的时候不选择保持登录 默认保持时长  默认8小时 

8、全局可配置 登录是选择保持登录默认保持时长 最大一年 默认7天

9、系统做了用户交互行为判断 没有交互开始计时 计时超过后台配置秒数 就自动触发锁屏

10、多终端互顶下线

11、强退用户

本站里右上角可以搜索ThreadLocal 有小伙伴分享过ThreadLocal存用户替代session jfinal官网和club也是这么实现的

基于数据库+httponly cookie +缓存 间距可扩展性和灵活性 可轻松扩展单点登陆和多节点部署

评论区

简单代码

2021-03-22 10:16

和jwt有什么区别?

山东小木

2021-03-22 10:19

@简单代码 jwt复杂 不灵活 过期无法消除 这个是使用数据库+cookie+缓存 这个方式适合后台管理类用户登录 jwt适合手机 移动 小程序 app 前端H5登录场景更好点

大晚上的

2021-03-22 11:02

请教下 去掉session有什么好处吗? 这个跟把session直接塞进ThreadLocal 有区别吗

山东小木

2021-03-22 12:03

@大晚上的 session依赖服务器创建 多节点部署就会存在session共享问题 你还得操作配置session共享 现在session存在数据库里 cookie客户端持有 加上全局缓存 性能灵活性 多节点 共享问题就自然不是问题了

opal

2021-03-22 19:26

session存在数据库里,不就是session共享吗?

山东小木

2021-03-22 19:38

@opal 但是不依赖于服务器给你创建session 而是自己维护 本站官网和club就是这个基础原理