【问题标题】:update of hibernate and spring security failed休眠和春季安全更新失败
【发布时间】:2013-05-28 15:14:15
【问题描述】:

我想在我的应用程序中将 hibernate 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;

【问题讨论】:

  • 当我将 spring security 从 3.1 降级到 3 时一切正常,你知道解决这个问题的方法吗?
  • 不,没有多个 Spring Security 版本,我不会尝试破解一些类加载问题。

标签: spring hibernate spring-security


【解决方案1】:

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


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

【讨论】:

  • 如何检查数据库中是否有任何用户权限序列化!
  • 刚刚注意到 JPA - Hibernate 正在为您序列化它。更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
相关资源
最近更新 更多