0

我想在我的应用程序中将休眠 3 更新到 4 和 spring 3 到 3.1 和 spring security 3 到 3.1,但是当我这样做时,具有使用数据库中以前版本生成的权限的用户不可用并且异常

 java.io.InvalidClassException GrantedAuthorityImpl local class incompatible 

当应用程序想要从数据库中获取用户权限时发生。这是实体用户的配置:

@ElementCollection(targetClass = GrantedAuthority.class, fetch=FetchType.EAGER)
@CollectionTable(name = "user_authorities", schema = "mydb", joinColumns = @javax.persistence.JoinColumn(name = "user_id"))
private Collection<GrantedAuthority> authorities;
4

1 回答 1

0

刚刚检查了master3.0.x分支之间的差异。您的问题出在 Hibernate 完成的序列化中。根据 JPA 配置判断,您将可序列化的 POJO ( GrantedAuthorityImpl) 对象直接存储到数据库中。这不是最佳方法。最好将其更改为仅存储字符串集合。


解决方法:您可以将旧GrantedAuthorityImpl源代码放入源代码中,以便类加载器更喜欢您的版本。那么你应该可以使用 Spring Security 3.1 并且仍然使用你的方法。然而,这是来自黑客解决方案类别。

于 2013-06-02T08:53:49.450 回答