有没有用过sa-token的高手?有个问题请教下

登录认证用到了sa-token,缓存用到Redis,程序用到了HttpSession,但satoken中的session与httpsession不共享,导致获取不到数据,websoket也失效。请问如何做到sasession与httpsession数据共享?不想整个项目都改动,怕是牵一发而动全身。

问了satoken作者,他说没办法共享。JF社区牛人多,想问问大家有没有好的解决方法。

评论区

杜福忠

2024-12-16 12:55

没有加一层不能解决的,如果有就再加一层包装类

北流家园网

2024-12-16 14:04

@杜福忠 请指点下,不懂如何包装

杜福忠

2024-12-16 18:53

@北流家园网 我没用过sa-token,但是通过他们官网文档介绍:https://sa-token.cc/doc.html#/use/session
可知 有 StpUtil.getSession() 这个工具类。
https://sa-token.cc/doc.html#/start/download

JF 的文档:https://jfinal.com/doc/3-10
可知 Controller有getSession()系列方法。那么可以通过自定义BaseController覆写里面的getSession系列方法。返回一个你自定义的HttpSession对象(装饰模式)里面方法转调原HttpSession对象的方法。

比如重写HttpSession的getAttribute方法,里面可以先取原HttpSession对象的getAttribute数据,没有的时候,再去取StpUtil.getSession().get(key) 这样子。就兼容了老项目与新框架。

如果项目没有BaseController这层,可以直接在Handler层对HttpServletRequest对象进行(装饰模式),进而重写HttpServletRequest类的request.getSession系列方法,返回你自定义的HttpSession对象。

北流家园网

2024-12-16 20:59

@杜福忠 厉害,没用过也知道思路。明白了,根据你的思路已实现,非常感谢

请问额qwe

2024-12-18 09:51

能分享下怎么用的吗?我用 jfinal demo 项目加 sa-token-jfinal-plugin 启动报错了

北流家园网

2024-12-19 08:25

@请问额qwe 按照他们的文档先配置好。https://github.com/dromara/Sa-Token/tree/dev/sa-token-starter/sa-token-jfinal-plugin

热门反馈

扫码入社