org.crazycake.shiro.exception.SerializationException解决方案

问题描述:

之前项目使用的shiro,转移到另一个项目之后并没有变动,但是发现登陆接口无法登录,
仔细debug之后发现账号密码及验证过程无任何问题
然后仔细看控制台日志,发现给的一下报错

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4815b48]
2021-04-20 15:28:13.393 ERROR 9888 --- [io-22077-exec-1] org.crazycake.shiro.RedisSessionDAO      : serialize session error. session id=c020df2b14234428b8ade115da692942
2021-04-20 15:28:13.393  INFO 9888 --- [io-22077-exec-1] c.f.pay.service.Impl.LoginServiceImpl    : org.crazycake.shiro.exception.SerializationException: serialize error, object=org.apache.shiro.session.mgt.SimpleSession,id=c020df2b14234428b8ade115da692942


原因分析:

最后发现可能是由于ession序列化过程中遇到错误


解决方案:

session在序列化的过程中需要一个id,而这个id是null的话就会序列化失败。
调用登录接口的时候,传入的UserEntity对象,session序列化的过程中会找到该实体类的id,而UserEntity本身没有序列化,进而导致session序列化失败。作者误以为lombok的@data标签同时会对实体类进行可序列化操作。查过后发现并非如此:@Data:注解在类上,相当于同时使用了@ToString、@EqualsAndHashCode、@Getter、@Setter和@RequiredArgsConstrtor。因此实体类需要实现Serializable接口来支持序列化。

你可能感兴趣的:(org.crazycake.shiro.exception.SerializationException解决方案)