Sa-Token icon indicating copy to clipboard operation
Sa-Token copied to clipboard

TokenSession 存入的对象取出时会被修改为LinkedHashMap类型

Open chengliang4810 opened this issue 7 months ago • 6 comments

使用版本:

solon 3.2.1 satoken 1.42.0

报错信息:

从图中观察,再一次请求过程中, 通过StpUtil获取两次TokenSession,整个过程中没有其他的业务代码干扰的情况下,出现存入的对象信息被转换为了Map对象。导致无法正确的获取想要的数据

Image

希望结果:

类型保持一致

复现步骤:

涉及到的依赖 ~~~ <groupId>org.noear</groupId> <artifactId>redisson-solon-plugin</artifactId>

    <!-- sa-token -->
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-solon-plugin</artifactId>
    </dependency>
    <!-- sa-token redisson依赖, 使用redis时加入。 -->
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-redisson</artifactId>
    </dependency>
    <!-- sa-token snack3 序列化框架 -->
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-snack3</artifactId>
    </dependency>

~~~

< 备注:如果复现步骤比较复杂,请将 demo 上传到 gitee 并留下地址 >

chengliang4810 avatar May 01 '25 08:05 chengliang4810

换 getModel() 方法来取值

click33 avatar May 01 '25 08:05 click33

换 getModel() 方法来取值

尝试了 sa-token-snack3和sa-token-jackson两个不同的库,情况依然一样

Image

chengliang4810 avatar May 01 '25 08:05 chengliang4810

换 getModel() 方法来取值

均在清空浏览器token信息和重启后端项目后进行的测试

chengliang4810 avatar May 01 '25 09:05 chengliang4810

清空浏览器没用,你得把redis数据清空了再测试

click33 avatar May 01 '25 11:05 click33

redis数据库也清空尝试了,没有作用。 我尝试了更换存储的key名,创建一个一摸一样的Test类进行存储和获取一样出现了问题。 目前排查出的结果是 当对象中存在 List,Set的类型字段并且不为null时,就会出现获取对象时变为map的情况。

Image

Image

chengliang4810 avatar May 07 '25 17:05 chengliang4810

1.42.0 版本 snake 保存数据时 会丢失类型信息 无法反序列化成功

但是 getModel 指定类型后仍旧 无法反序列化成功 有点不科学

Jackson 在保存数据时 是保存类型信息的,仍旧无法反序列化成功,更不科学了

click33 avatar May 09 '25 13:05 click33