Tim*_*mes 6 java architecture spring spring-security
我目前正在开发一个带有 JPA/Hibernate 和 Angular 2 前端的多用户 Spring Boot 应用程序。我设想了两种基本类型的用户:供应商和客户。
在开始编码之前,我制作了一个 UML 类图,其中包含该类User和两个子类Customer以及Vendor. 子类的原因是它们具有不同的属性:例如,供应商应该能够编写关于他自己的一般描述,而客户应该能够保存收藏夹。
下图是我的类图的摘录:
由于这是我的第一个具有登录/注册功能的应用程序,我开始阅读有关如何使用 Spring Security 实现登录和注册功能的教程。随着时间的推移,我不得不意识到基本上所有的样本都只包含一个User类,其权限取决于他的Roles,这通常是实现上述功能的推荐/需要的类。
在我看来,User该类并不意味着有子类,但教程和示例自然主要涵盖基本设置,而不是具有完全不同用户的复杂业务模型的表示。
我的问题如下:创建User我想用于授权自定义UserDetailsService类的类的子类是否可行和可取?如果没有,您是否建议将Customer和Vendor类中的属性合并到User类中,从而确定User的角色是否应该能够拥有某个属性,否则它将为空?
非常感谢!
Spring 安全性与UserDetailsService用于身份验证和授权功能的接口一起工作。您应该实现从数据库或内存或任何地方loadUserByUsername加载的功能User。
Spring 安全以UserDetails接口为模型工作。因此,您的User实体需要实现UserDetailsSpring Security 可以使用的接口。
现在,您拥有User可以像其他实体一样继承的实体,并且您可以使用@Inheritance以下注释对其进行注释:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Length(min=5)
private String password;
private String username;
@Email
private String email;
private String phoneNumber;
private boolean enabled;
private boolean verified;
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<Authority> roles= new HashSet<>();
//...
}
@Entity
public class Vendor extends User{
private String name;
private String description;
private Date openingTime;
private Date closingTime;
@ManyToOne
private List<File> images;
//...
}
@Entity
public class Customer extends User{
private String forename;
private String surname;
@ManyToOne
private List<PaymentDetails> paymentDetailsList;
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2779 次 |
| 最近记录: |