Shiro SimpleSession反序列化问题
2024-12-31 17:23:27 3
项目中准备支持以redis支持分布式session.
但这个SimpleSession
, 序列化到redis没问题, 反序列化就报错了.
一个SavedRequest
对象无法构造, 因为没有空参构造方法. 除了这个对象, 还有很多奇奇怪怪的类无法反序列化
查看代码, 操作redis用的是RedisTemplate
, 该类默认的ValueSerializer
是Jackson2JsonRedisSerializer
, 是通过将对象转为带类型信息的json进行序列化的.
尝试通过调整Jackson2JsonRedisSerializer
内的ObjectMapper
序列化策略去实现序列化, 发现过于复杂, 需要调整的东西太多.
然后发现SimpleSession
实现了jdk的序列化机制
包括接口java.io.Serializable
和这两个方法
private void readObject(ObjectInputStream in)
private void writeObject(ObjectOutputStream out)
将redisTemplate的序列化调整为JdkSerializationRedisSerializer
之后, 就正常了
tips
为什么jdk的序列化就能正常反序列化SavedRequest
呢?
因为jdk反序列的对象是由JVM自己生成的对象,不通过构造方法生成