Shiro SimpleSession反序列化问题
2024-12-31 17:23:27 10
项目中准备支持以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自己生成的对象,不通过构造方法生成






