Chr*_*tis 6 java spring jpa spring-security spring-data-jpa
我正在使用Spring Boot和Spring Security。Spring Data JPA我有一个User用于身份验证的实体。我还有一个服务扩展UserDetailsService,并将其注册到我的安全配置中。
现在我想要的是使用另外两个实体Employer,Employee这将是我的业务模型。每个实体都有自己不同的属性(雇主和雇员实体只是一个示例,可能是其他实体)。我想使用这两个实体进行身份验证,这意味着用户可以注册为员工,提供除了 的User属性(电子邮件、密码...)之外Employee的属性(性别、雇用日期...)。
我应该扩展User我当前使用的课程吗?这将如何运作?
我是否应该创建两个实体,然后将它们与用户实体建立一对一的关系?
还有别的办法吗?
我不知道什么是正确的方法。最佳实践是什么?一个例子将受到高度赞赏。
这是我的用户类:
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, unique = true)
public String email;
@Column(nullable = false)
public String firstname;
@Column(nullable = false)
public String lastname;
@JsonIgnore
@Column(nullable = false)
public String password;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private Role role;
public User() {
}
public User(User user) {
this.email = user.email;
this.firstname = user.firstname;
this.lastname = user.lastname;
this.password = user.password;
this.role = user.role;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
@JsonIgnore
public String getPassword() {
return password;
}
@JsonProperty
public void setPassword(String password) {
this.password = password;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:既然还没人回答,我想也许我解释错了。我只想使用 2 个或更多业务模型(实体)进行用户身份验证。就这样。
我的系统中也有类似的困境。我们选择仅对安全模型(用户名、密码、权限等)和摘要(带有 id 和电子邮件 - 这是强制性且唯一的)使用不同的实体User,这与 this 呈 1:1 关系Authentication。因此,我们设法扩展User领域中的特定表示并建模。如果您想创建另一种方式进行身份验证,也可以采用同样的方法。您可以进行摘要Authentication和稍后TokenAuthentication(例如 OAuth)或BasicAuthentication(使用用户名和密码)。
我见过的最好的方法之一是聚合 3 个实体:
关系:身份验证 -(N:1)- 主体 -(1:1)- 用户
| 归档时间: |
|
| 查看次数: |
2366 次 |
| 最近记录: |