报错[ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [BizSeq : ] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.InvalidClassException: org.springframework.security.core.context.SecurityContextImpl; local class incompatible: stream classdesc serialVersionUID = 520, local class serialVersionUID = 530]
序列化类异常
当某一个类实现java.io.Serializable接口时,该类默认会生成一个private static final long serialVersionUID = 1L;
如果你是网络客户端程序,当客户端序列化传入的实体类中的serialVersionUID 和接受到该序列化的实体类的serialVersionUID 不一致,则会出现以上异常。
所以在处理这种问题的时候我们要确保序列化与反序列化的serialVersionUID 值保持一致
当然,我这这个问题是因为引入jar包的对应版本不一样,当时我本引用5.2.2.RELEASE版本的,系统却引用的是不同版本的,jar中用的类的序列化serialVersionUID就不能保持一致所导致的。
解决:替换jar包依赖。当然此类问题,如果没有一时间发现是jar包的问题,可以先根据报错提示找找是哪个序列化类中报的错,在一步一步找,是否是所依赖的对应jar包问题,如果不是,就看看其类中的序列化serialVersionUID的值。
细节还可参考:serialVersionUID的使用和报InvalidClassException且serialVersionUID的值不同