如何从Spring Security扩展User Class并使用JPA创建表

时间:2017-02-01 13:16:36

标签: java spring hibernate spring-mvc jpa

我正在尝试从Spring Security提供的用户和权限中获取属性。

我知道您可以覆盖UserDetailsS​​ervice以创建自己的自定义类,但在这种情况下,我想获得完整的默认类,此外还有一些属性。

让我解释一下代码:

public class User implements UserDetails, CredentialsContainer {

private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;

private String password;
private final String username;
private final Set<GrantedAuthority> authorities;
private final boolean accountNonExpired;
private final boolean accountNonLocked;
private final boolean credentialsNonExpired;
private final boolean enabled; 
}

这是Spring Security提供的User类,我想要的是使用这些属性扩展我自己的类。 我试过这个,但数据库没有从User获取属性:

@Entity
@Table(name="MyUser")

public class ExtendedUser extends User {

  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private long id;

  private String email;


  private static final long serialVersionUID = -2147191899215904479L;

  public ExtendedUser(String username, String password, boolean enabled, boolean accountNonExpired,
        boolean credentialsNonExpired, boolean accountNonLocked,
        Collection<? extends GrantedAuthority> authorities) {
        super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
    // TODO Auto-generated constructor stub
}
.
.
.

我的问题是,我是否需要创建自己的User类才能继承这些属性并使用JPA注释使Hibernate“理解”它?

我想我在这里误导了一些东西,但我无法理解。

2 个答案:

答案 0 :(得分:4)

在JPA中,将其映射到 orm.xml 或Hibernate中,您可以使用已弃用的 HBM xml

我实际上建议不要从Spring Security User类扩展实体映射,因为它会使您的映射与其实现非常相关,而您无法控制并且可能使升级变得更加困难。

相反,我建议您创建自己的User实体,并将信息存储在适合您应用程序需求的模型中。然后,作为UserDetailsService实现的一部分,您将获取User实体和相关实体,并构造一个扩展的UserDetails对象,并将其提供给Spring Security。

答案 1 :(得分:1)

我认为您可以覆盖Getter / Setter以在其上添加JPA的注释。