在OAuth2中反序列化身份验证对象时出现问题

时间:2016-03-21 07:58:51

标签: java spring hibernate serialization oauth-2.0

我在Old项目中有OAuth2实现,比如v1,使用Spring + hibernate 3.在当前的新实现中,比如说v2,我们用hibernate 4升级了Hibernate。 在这两种情况下,数据库是相同的。在身份验证对象中,我们持有一个Entity类,比如说包含

的User.java
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
private List<Authority> authorities;

对于v1,它保持良好并且也正确检索。但是当我们转到v2时,我们会遇到如下例外情况。

java.lang.ClassNotFoundException: org.hibernate.collection.PersistentBag
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:626)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)

这是因为v1有hibernate 3,它具有PersistentBag的包结构为org.hibernate.collection.PersistentBag。 但是v2有hibernate 4,它改变了这个包结构,org.hibernate.collection.internal.PersistentBag。

由于旧的身份验证对象的反序列化在v2中失败。

有人能建议我采取好的方法吗?

0 个答案:

没有答案